Briefly, first time with XPath looks great, and it is, but when you start coding it is not so easy.
Good news, you just need a lit bit more 🙂
Example: you have a few webservices given similar xml response:
<MyResponse> <ResponseMessage /> <ResponseCode /> <!-- put custom xml here --> <ServerID /> <RequestID /> </MyResponse>
What if you want to log which server run your request?
Sample code could be like this
XmlDocument xdoc = new XmlDocument(); xdoc.LoadXml(xmlString); foreach (XmlElement xItem in xdoc.SelectNodes("//ServerID")) { // do sth }
Actually, SelectNodes methods return no nodes, and XPath it’s almost right.
XPath query string miss namespace specs, so xpath query will look for node with empty namespace.
A quick ‘n dirty sample code could be like this:
XmlDocument xdoc = new XmlDocument(); xdoc.LoadXml(xmlString); XmlNamespaceManager nsmanager = new XmlNamespaceManager(xdoc.NameTable); nsmanager.AddNamespace("x", xdoc.DocumentElement.Attributes["xmlns"].Value); foreach (XmlElement xItem in xdoc.SelectNodes("//x:ServerID")) { // do sth here }
where XPath query string report namespace
Read more here: Xml-SelectNodes with default-namespace via XmlNamespaceManager not working as expected
Technorati tags: XML,XPath