Namespace Traversal
- by RikSaunderson
I am trying to parse the following sample piece of XML:
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soapenv:Body>
<d2LogicalModel modelBaseVersion="1.0" xmlns="http://datex2.eu/schema/1_0/1_0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://datex2.eu/schema/1_0/1_0 http://datex2.eu/schema/1_0/1_0/DATEXIISchema_1_0_1_0.xsd">
<payloadPublication xsi:type="PredefinedLocationsPublication" lang="en">
<predefinedLocationSet id="GUID-NTCC-VariableMessageSignLocations">
<predefinedLocation id="VMS30082775">
<predefinedLocationName>
<value lang="en">VMS M60/9084B</value>
</predefinedLocationName>
</predefinedLocation>
</predefinedLocationSet>
</payloadPublication>
</d2LogicalModel>
</soapenv:Body>
</soapenv:Envelope>
I specifically need to get at the contents of the top-level predefinedLocation tag. By my calculations, the correct XPath should be
/soapenv:Envelope/soapenv:Body/d2LogicalModel/payloadPublication/predefinedLocationSet/predefinedLocation
I am using the following C# code to parse the XML:
string filename = "content-sample.xml";
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(filename);
XmlNamespaceManager nsmanager = new XmlNamespaceManager(xmlDoc.NameTable);
nsmanager.AddNamespace("soapenv", "http://schemas.xmlsoap.org/soap/Envelope");
string xpath ="/soapenv:Envelope/soapenv:Body/d2LogicalModel/payloadPublication/predefinedLocationSet/predefinedLocation";
XmlNodeList itemNodes = xmlDoc.SelectNodes(xpath, nsmanager);
However, this keeps coming up with no results. Can anyone shed any light on this, because I feel like I'm banging my head on a brick wall.