<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>
我的xpath查询是
XmlNode node3 = xdoc.SelectSingleNode("//identifier/text()");
查询假设获取第一个标识符值“BatchProcessed”。
但是当我测试时它返回null但是当我在xml工具(在线)中使用路径时它会重新计算值。
我不知道这里缺少什么,有人启发我
答案 0 :(得分:2)
看起来您的xml文档缺少根元素。我添加了一个<Root>
节点来包装两个<Header>
节点。下面的代码显示了如何通过利用XPath请求来检索预期值 BatchProcessed 。
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"
缺少的根节点也有可能带有默认命名空间(这增加了一点复杂性)。下面的代码演示了如何解决这个问题。
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"