Search code examples
c#xpathxmldocument

Select single node


From the following xml:

<response>
    <content>
        <Result xmlns="http://www.test.com/nav/webservices/types">
            <Name>Test</Name>
        </Result>
    </content>
    <status>ok</status>
</response>

I am trying to get the value of the Name element the following way but that does not work:

private static void Main()
{
    var response = new XmlDocument();
    response.Load("Response.xml");
    var namespaceManager = new XmlNamespaceManager(response.NameTable);
    namespaceManager.AddNamespace("ns", "http://www.test.com/nav/webservices/types");

    Console.WriteLine(response.SelectSingleNode("/response/content/Result/Name", namespaceManager).InnerXml);
}

How can I select the Name element?


Solution

  • Your code would have worked just fineif the Xml had defined the namespace with a "ns:" prefix.

    But in this case, the namespace is given without any prefix, which sets the default namespace for everything in the Result tag to ".../webservice/types".

    To reflect this, you need to modify the Xpath, and tell the XmlDocument that the nodes you are looking for under Resultare in the webservice/types namespace. So your query will look like this:

    Console.WriteLine(response.SelectSingleNode(@"/response/content/ns:Result/ns:Name", namespaceManager).InnerXml);