C#Xml SelectSingleNode返回null

时间:2017-12-19 07:08:34

标签: c# xml xpath selectsinglenode

我有这个xml并希望从xml中提取第一个国家

<string xmlns="http://www.webserviceX.NET">
   <NewDataSet>
      <Table>
         <Country>Hong Kong</Country>
         <City>Cheung Chau</City>
      </Table>
      <Table>
         <Country>Hong Kong</Country>
         <City>Hong Kong Inter-National Airport</City>
      </Table>
   </NewDataSet>
</string>

这就是我的所作所为:

value = xml.DocumentElement.SelectSingleNode("string/NewDataSet/Table[1]/Country").InnerText;

这总是抛出一个未设置为对象实例的异常,因为choicesinglenode总是重新返回null。奇怪的是我已经使用this测试了这个xpath,它确实返回了我想要的节点。

我搜索了一个解决方案并发现this建议我必须添加名称空间,这就是我所做的:

  var nsmgr = new XmlNamespaceManager(xml.NameTable);
  nsmgr.AddNamespace("string", "http://www.webserviceX.NET");
  var node = xml.DocumentElement.SelectSingleNode("string/NewDataSet/Table[1]/Country", nsmgr);

我还有同样的例外。有人可以让我知道我在这里做错了什么吗?谢谢:))

1 个答案:

答案 0 :(得分:1)

只需使用XmlNamespaceManager

即可
XmlNamespaceManager namespaces = new XmlNamespaceManager(xdoc.NameTable);
namespaces.AddNamespace("sp", "http://www.webserviceX.NET");
var nodes = xdoc.DocumentElement.SelectSingleNode("//sp:NewDataSet/sp:Table[1]/sp:Country", namespaces);