tags:

views:

364

answers:

3

Hi, my problem is like this.Let's say i have xml like this

<roor>
  <child Name = "child1">
  <element1>Value1</element1>
  <element2>Value2</element2>
  </child>
  <child Name = "child2">
  <element1>Value1</element1>
  <element2>Value2</element2>
  <element3>Value3</element3>
  </child>
</root>

I have a method that gets as parameter XmlNode "node". Lets say "node" has value "child1" Then i try like this:

node.SelectSingleNode( "//element3" );

The problem is this code returns element3 from "child2". What i want is if there is no child "element3" of "node" to return null so i add it by hand.
Best Regards,
Iordand

+5  A: 

The XPath expression you have isn't what you want.

Replace it with this:

node.SelectSingleNode( "element3" ); 

And you'll get the result you're looking for.

Welbog
Or alternatively "./element3" as it may help to make it clear what it means.
Robin Day
Just a one more thing to ask if "element3" is not direct child of "child" but there is another node in between what xpath to use ?
IordanTanev
@lordanTanev: You can put the // between the node you're currently on and the node you want, like this: `.//element3`.
Welbog
+2  A: 

The "//" is a global look up.

What you'll need to do is get a list of all children

XmlNodeList nodes = xmlDoc.SelectNodes("//Child");

loop through that list and do a

XmlNode node = nodes.SelectSingleNode("element3");

This will return null if it's not there, and will step through every child looking.

taylonr
+1  A: 

Hi, the problem here is the XPath expression you are using, try it without the '//'. Like that:

node.SelectSingleNode( "element3" );

Read more here .

Alexander Vakrilov