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?
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With