当文档没有命名空间时,我应该将哪个XPath表达式用于XmlDocument.SelectSingleNode?

时间:2014-10-06 11:22:52

标签: c# xml xpath xml-namespaces

我有一些通过默认转换JSON响应流生成的XML,因此没有声明名称空间。我现在想要使用SelectSingleNode方法从该XML检索特定节点,但不能指定命名空间,因为没有指定。我应该用什么来注册命名空间?

我的XML看起来像这样:

<root type="object">
  <customer type="object">
    <firstName type="string">Kirsten</firstName>
    <lastName type="string">Stormhammer</lastName>
  </customer>
</root>

我尝试的代码是:

XmlDocument document = new XmlDocument();
document.LoadXml(customerXml);

XmlNamespaceManager manager = new XmlNamespaceManager(document.NameTable);
manager.AddNamespace("x", "http://www.w3.org/TR/html4/");    // What should I use here?

XmlNode customerNode= document.SelectSingleNode("x:customer");

这总是返回null。

我也尝试使用local-name限定符(不使用命名空间管理器):

XmlDocument document = new XmlDocument();
document.LoadXml(customerXml);

XmlNode customerNode= document.SelectSingleNode("/*[local-name()='root']/*[local-name()='customer']");

这也会返回null。

1 个答案:

答案 0 :(得分:2)

然后你可以用更简单的方式做,不涉及XmlNamespaceManager和命名空间前缀:

XmlDocument document = new XmlDocument();
document.LoadXml(customerXml);

XmlNode customerNode= document.SelectSingleNode("/root/customer");

<强> [.NET fiddle demo]