Usher
Usher

Reputation: 2146

xpath query work in online tool but not returning value when i test by code

  <Header>
      <reference>
        <identifier>BatchProcessed</identifier>
        <datetime>2011-08-15T05:12:00+10:00</datetime>
      </reference>
    </Header>
    <Header>
      <reference>
        <identifier>Running</identifier>
        <datetime>2011-08-15T05:12:00+10:00</datetime>
      </reference>
    </Header>

my xpath query is

XmlNode node3 = xdoc.SelectSingleNode("//identifier/text()");

the query suppose to get the first identifier value " BatchProcessed".

but it returns null when i test but when i use the path in xml tool (online) it retruns value.

i don't know what am missing here,some one enlighten me

Upvotes: 0

Views: 268

Answers (1)

nulltoken
nulltoken

Reputation: 67669

It looks like your xml document lacks a root element. I've added one <Root> node to wrap the two <Header> nodes. The code below shows how to retrieve the expected value BatchProcessed by leveraging your XPath request.

var xml = @"<Root><Header>
    <reference>
    <identifier>BatchProcessed</identifier>
    <datetime>2011-08-15T05:12:00+10:00</datetime>
    </reference>
</Header>
<Header>
    <reference>
    <identifier>Running</identifier>
    <datetime>2011-08-15T05:12:00+10:00</datetime>
    </reference>
</Header></Root>";

var xdoc = new XmlDocument();
xdoc.LoadXml(xml);

XmlNode node3 = xdoc.SelectSingleNode("//identifier/text()");
Console.WriteLine(node3.Value); // -> "BatchProcessed"

There's also a chance that the missing root node was bearing a default namespace (which adds a little level of complexity). The code below demonstrates how to tackle this.

var xml = @"<Root xmlns=""http://www.example.com/schemas/0.1""><Header>
    <reference>
    <identifier>BatchProcessed</identifier>
    <datetime>2011-08-15T05:12:00+10:00</datetime>
    </reference>
</Header>
<Header>
    <reference>
    <identifier>Running</identifier>
    <datetime>2011-08-15T05:12:00+10:00</datetime>
    </reference>
</Header></Root>";

var xdoc = new XmlDocument();
xdoc.LoadXml(xml);

var ns = new XmlNamespaceManager(new NameTable());
ns.AddNamespace("ns", "http://www.example.com/schemas/0.1");

XmlNode node3 = xdoc.SelectSingleNode("//ns:identifier/text()", ns);
Console.WriteLine(node3.Value); // -> "BatchProcessed"

Upvotes: 2

Related Questions