0
  <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

1 Answer 1

2

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"
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.