Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

XML parsing with C#, XPath

Tags:

c#

xml

xpath

Mine is a general question on XML parsing practices.

Lets say we have an XML document, and we use XPath to get some node from that document:

XMLNode node1=XMLDoc.SelectSingleNode("/SomeNode/SomeOtherNode");

Now n contains the data of SomeOtherNode. Intuitively I'd expect the following line of code:

XMLNode node2=XMLDoc.SelectSingleNode("/Child");

to populate node2 with those children of node1 which are named "Child". But sadly it doesn't work that way. The XPath search begins from the root of the document, not from the XMLNode object it was invoked on. Is there any way to get it to work in the "intuitive" manner? This would be convenient for a recursive or object oriented approach to parsing.

I've tried using the XMLPathNavigator object but it works the same way. And it seems I could set the inner text of an XMLDocumentFragment to the inner text of the given node, but that seems like an inefficient duplication of data.

Any ideas?

like image 263
Vercinegetorix Avatar asked Feb 28 '23 00:02

Vercinegetorix


1 Answers

XMLNode node2 = XMLDoc.SelectSingleNode("/Child");

This will select the element called 'Child' from the root (/). Note that you are applying the call on XMLDoc, not on node1, so it will be relative to the root of the document. I think what you want is:

XMLNode node2 = node1.SelectSingleNode("Child"); // edit: removed slash

Which is an XPath relative to the previously selected node, not the document root.

Alternatively, you could do:

XMLNode node = XMLDoc.SelectSingleNode("/SomeNode/SomeOtherNode/Child")

Which will select the child node directly.

like image 50
Paul Ruane Avatar answered Mar 06 '23 17:03

Paul Ruane