473,327 Members | 1,919 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,327 software developers and data experts.

How to get this XML tag?

Rather than this type of tag:

<File Type="Criteria">
</File>

How can I get this:

<File Type="Criteria" />

I only need the closing tag if there will be elements or children
inserted there.

Thanks,
Brett

Feb 2 '06 #1
16 1615
Brett Romero <ac*****@cygen.com> wrote:
Rather than this type of tag:

<File Type="Criteria">
</File>

How can I get this:

<File Type="Criteria" />

I only need the closing tag if there will be elements or children
inserted there.


Could you tell us a bit more about the context? Are you trying to read
the XML, write it, what?

--
Jon Skeet - <sk***@pobox.com>
http://www.pobox.com/~skeet Blog: http://www.msmvps.com/jon.skeet
If replying to the group, please do not mail me too
Feb 2 '06 #2
What do you mean? Do you mean when you save the DOM? The two are
equivalent.

"Brett Romero" <ac*****@cygen.com> wrote in message
news:11*********************@z14g2000cwz.googlegro ups.com...
Rather than this type of tag:

<File Type="Criteria">
</File>

How can I get this:

<File Type="Criteria" />

I only need the closing tag if there will be elements or children
inserted there.

Thanks,
Brett

Feb 2 '06 #3
In C#, when I create an element, it always throws in the closing tag,
which I don't want. The backslash in the opening tag is a shortcut,
which is what I want.

Brett

Feb 2 '06 #4
Brett Romero <ac*****@cygen.com> wrote:
In C#, when I create an element, it always throws in the closing tag,
which I don't want. The backslash in the opening tag is a shortcut,
which is what I want.


Again, please say exactly what context this is in. How are you creating
the element? How are you then formatting the document?

--
Jon Skeet - <sk***@pobox.com>
http://www.pobox.com/~skeet Blog: http://www.msmvps.com/jon.skeet
If replying to the group, please do not mail me too
Feb 2 '06 #5
As for context, I'm only creating an XMLDocument() type and filling it
with elements.

Brett

Feb 2 '06 #6
Once again Google Groups is eating my posts. Here's another try:

I create an XMLDocument() object. I give it the root node and add
elements. When I do xmldoc.Save(filename), the file will look like
this:

<?xml version="1.0"?>
<ROOT>
<Person PersonId="100">
</Person>
</ROOT>

Here's my code, which is in a class extending XMLDocument(). That's
why you see the reference to "this":

private XmlDocument xmldoc = new XmlDocument();
private string rootNodeName = "ROOT";
private XmlNode xmlnode;
private XmlElement xmlelem;
private XmlElement xmlelem2;
private XmlText xmltext;

//This is in a method
xmlnode=this.CreateNode(XmlNodeType.XmlDeclaration ,"","");
this.AppendChild(xmlnode);
//add the root element
xmlelem=this.CreateElement("",rootNodeName,"");
xmltext=this.CreateTextNode("");
xmlelem.AppendChild(xmltext);
this.AppendChild(xmlelem);

//This is in a method
//add another element (child of the root)
xmlelem2=this.CreateElement("","Person","");
XmlAttribute atrXML = xmldoc.CreateAttribute("PersonId");
atrXML.Value = "100";
xmlelem2.SetAttributeNode(atrXML);
xmlelem2.AppendChild(xmltext);
this.ChildNodes.Item(1).AppendChild(xmlelem2);

I'm passing variables to each of the methods but hard coded values for
simplicity.

Hope that helps and this post.

Thanks,
Brett

Feb 2 '06 #7
Brett Romero <ac*****@cygen.com> wrote:

<snip>
//This is in a method
//add another element (child of the root)
xmlelem2=this.CreateElement("","Person","");
XmlAttribute atrXML = xmldoc.CreateAttribute("PersonId");
atrXML.Value = "100";
xmlelem2.SetAttributeNode(atrXML);
xmlelem2.AppendChild(xmltext);
this.ChildNodes.Item(1).AppendChild(xmlelem2);


The problem is that you're appending an empty text node. If you get rid
of xmlelem2.AppendChild(xmltext); then it works fine.

Here's a short but complete example program:

using System;
using System.Xml;

class Test
{
static void Main()
{
XmlDocument doc = new XmlDocument();

doc.AppendChild(doc.CreateNode
(XmlNodeType.XmlDeclaration,"",""));
XmlElement root = doc.CreateElement ("", "ROOT", "");
XmlText text = doc.CreateTextNode ("");
root.AppendChild(text);
doc.AppendChild(root);

XmlElement person = doc.CreateElement ("", "Person", "");
XmlAttribute attr = doc.CreateAttribute ("PersonId");
attr.Value = "100";
person.SetAttributeNode (attr);
// Uncomment this line to get the "broken" behaviour
// person.AppendChild(text);
root.AppendChild(person);

doc.Save(Console.Out);
}
}

--
Jon Skeet - <sk***@pobox.com>
http://www.pobox.com/~skeet Blog: http://www.msmvps.com/jon.skeet
If replying to the group, please do not mail me too
Feb 2 '06 #8
Perfect!

How do I add a nested node? For example, if I want to get this
structure:

<ROOT>
<File Type="Criteria" />
<Search Type="Person" Name="My Search" />
<CriteriaCollection >
<Person FirstName="Brett" LastName="Rom" />
<Person FirstName="Jon" LastName="Do" />
</CriteriaCollection>
</ROOT>

Where CriteriaCollection contains another node(?) named Person.

Thanks,
Brett

Feb 2 '06 #9
Brett Romero <ac*****@cygen.com> wrote:
Perfect!

How do I add a nested node? For example, if I want to get this
structure:

<ROOT>
<File Type="Criteria" />
<Search Type="Person" Name="My Search" />
<CriteriaCollection >
<Person FirstName="Brett" LastName="Rom" />
<Person FirstName="Jon" LastName="Do" />
</CriteriaCollection>
</ROOT>

Where CriteriaCollection contains another node(?) named Person.


Create the CriteriaCollection element and append that as a child of the
root element. Then create the Person element and append that as a child
of the CriteriaCollection element.

--
Jon Skeet - <sk***@pobox.com>
http://www.pobox.com/~skeet Blog: http://www.msmvps.com/jon.skeet
If replying to the group, please do not mail me too
Feb 2 '06 #10
Do you have a code example of how that is done? I can't get the Person
node to go.

this.ChildNodes.Item(index).AppendChild(xmlelem2);

ROOT has been created. CriteriaCollection has also been created
successfully. Doesn't the index go from 0 on? When I added
CriteriaCollection, I used an index of 1. Shouldn't the next index be
2...for Person? When I try that, I get:

Object reference not set to an instance of object.

Thanks,
Brett

Feb 3 '06 #11
Brett Romero <ac*****@cygen.com> wrote:
Do you have a code example of how that is done? I can't get the Person
node to go.

this.ChildNodes.Item(index).AppendChild(xmlelem2);

ROOT has been created. CriteriaCollection has also been created
successfully. Doesn't the index go from 0 on? When I added
CriteriaCollection, I used an index of 1. Shouldn't the next index be
2...for Person? When I try that, I get:

Object reference not set to an instance of object.


You've *created* CriteriaCollection, but have you appended it yet?
Without seeing your code, it's hard to say...

--
Jon Skeet - <sk***@pobox.com>
http://www.pobox.com/~skeet Blog: http://www.msmvps.com/jon.skeet
If replying to the group, please do not mail me too
Feb 3 '06 #12
Yes - of which I said an index value of 1 was used:

this.ChildNodes.Item(1).AppendChild(xmlelem2);

where xmlelem2 contains the CriteriaCollection node.

Thanks,
Brett

Feb 3 '06 #13
Jon, I see the problem. I was trying to create things off of the
Declaration node, which I'm guessing you can't do.

Here's the finished product:

<?xml version="1.0"?>
<ROOT>
<File Type="Criteria" />
<DataCollection>
<Person FirstName="brett" />
</DataCollection>
</ROOT>

I insert items into DataCollection by using:

this.ChildNodes.Item(1).ChildNodes.Item(2).AppendC hild(xmlelem);

However, I can't always be sure DataCollection will be at 2 in the tree
structure. Is there a way to reference it by name instead of index?

Also, <File Type="Criteria" /> is an "Element" of ROOT, not a node.
Yet it pushes DataCollection down to index 2. Shouldn't DataCollection
be the first index off of ROOT? After all, I am saying ChildNodes,
which really shouldn't include elements.

Thanks,
Brett

Feb 3 '06 #14
Brett Romero <ac*****@cygen.com> wrote:
Jon, I see the problem. I was trying to create things off of the
Declaration node, which I'm guessing you can't do.
<snip>
I insert items into DataCollection by using:

this.ChildNodes.Item(1).ChildNodes.Item(2).AppendC hild(xmlelem);

However, I can't always be sure DataCollection will be at 2 in the tree
structure. Is there a way to reference it by name instead of index?
You could use an XPath expression - but wouldn't it be easier just to
keep a reference to the element you created?
Also, <File Type="Criteria" /> is an "Element" of ROOT, not a node.
Well, every element is a node. Look at the type hierarchy for
XmlElement...
Yet it pushes DataCollection down to index 2. Shouldn't DataCollection
be the first index off of ROOT? After all, I am saying ChildNodes,
which really shouldn't include elements.


Yes it should - see above.

--
Jon Skeet - <sk***@pobox.com>
http://www.pobox.com/~skeet Blog: http://www.msmvps.com/jon.skeet
If replying to the group, please do not mail me too
Feb 3 '06 #15
Can you give a code example of what this means or how it can be used:

You could use an XPath expression - but wouldn't it be easier just to
keep a reference to the element you created?

Thanks,
Brett

Feb 3 '06 #16
Brett Romero <ac*****@cygen.com> wrote:
Can you give a code example of what this means or how it can be used:
You could use an XPath expression - but wouldn't it be easier just to
keep a reference to the element you created?


I mean that at *some* point you're creating the DataCollection element.
Save a reference to it in a variable (like you've currently got for
xmlelem and xmlelem2). Then you just need to call
dataCollectionElement.AppendChild(personElement);

--
Jon Skeet - <sk***@pobox.com>
http://www.pobox.com/~skeet Blog: http://www.msmvps.com/jon.skeet
If replying to the group, please do not mail me too
Feb 3 '06 #17

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

3
by: William C. White | last post by:
Does anyone know of a way to use PHP /w Authorize.net AIM without using cURL? Our website is hosted on a shared drive and the webhost company doesn't installed additional software (such as cURL)...
2
by: Albert Ahtenberg | last post by:
Hello, I don't know if it is only me but I was sure that header("Location:url") redirects the browser instantly to URL, or at least stops the execution of the code. But appearantely it continues...
3
by: James | last post by:
Hi, I have a form with 2 fields. 'A' 'B' The user completes one of the fields and the form is submitted. On the results page I want to run a query, but this will change subject to which...
0
by: Ollivier Robert | last post by:
Hello, I'm trying to link PHP with Oracle 9.2.0/OCI8 with gcc 3.2.3 on a Solaris9 system. The link succeeds but everytime I try to run php, I get a SEGV from inside the libcnltsh.so library. ...
1
by: Richard Galli | last post by:
I want viewers to compare state laws on a single subject. Imagine a three-column table with a drop-down box on the top. A viewer selects a state from the list, and that state's text fills the...
4
by: Albert Ahtenberg | last post by:
Hello, I have two questions. 1. When the user presses the back button and returns to a form he filled the form is reseted. How do I leave there the values he inserted? 2. When the...
1
by: inderjit S Gabrie | last post by:
Hi all Here is the scenerio ...is it possibly to do this... i am getting valid course dates output on to a web which i have designed ....all is okay so far , look at the following web url ...
2
by: Jack | last post by:
Hi All, What is the PHP equivilent of Oracle bind variables in a SQL statement, e.g. select x from y where z=:parameter Which in asp/jsp would be followed by some statements to bind a value...
3
by: Sandwick | last post by:
I am trying to change the size of a drawing so they are all 3x3. the script below is what i was trying to use to cut it in half ... I get errors. I can display the normal picture but not the...
0
by: DolphinDB | last post by:
Tired of spending countless mintues downsampling your data? Look no further! In this article, you’ll learn how to efficiently downsample 6.48 billion high-frequency records to 61 million...
0
by: ryjfgjl | last post by:
ExcelToDatabase: batch import excel into database automatically...
0
by: Vimpel783 | last post by:
Hello! Guys, I found this code on the Internet, but I need to modify it a little. It works well, the problem is this: Data is sent from only one cell, in this case B5, but it is necessary that data...
0
by: ArrayDB | last post by:
The error message I've encountered is; ERROR:root:Error generating model response: exception: access violation writing 0x0000000000005140, which seems to be indicative of an access violation...
1
by: PapaRatzi | last post by:
Hello, I am teaching myself MS Access forms design and Visual Basic. I've created a table to capture a list of Top 30 singles and forms to capture new entries. The final step is a form (unbound)...
1
by: Defcon1945 | last post by:
I'm trying to learn Python using Pycharm but import shutil doesn't work
1
by: Shællîpôpï 09 | last post by:
If u are using a keypad phone, how do u turn on JavaScript, to access features like WhatsApp, Facebook, Instagram....
0
by: Faith0G | last post by:
I am starting a new it consulting business and it's been a while since I setup a new website. Is wordpress still the best web based software for hosting a 5 page website? The webpages will be...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 3 Apr 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome former...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.