C# 当文档没有命名空间时,我应该为XmlDocument.SelectSingleNode使用哪个XPath表达式?
我有一些XML是通过JSON响应流的默认转换生成的,因此没有声明名称空间。现在我想使用SelectSingleNode方法从该XML检索特定节点,但无法指定名称空间,因为没有指定名称空间。我应该使用什么来注册名称空间 我的XML如下所示:C# 当文档没有命名空间时,我应该为XmlDocument.SelectSingleNode使用哪个XPath表达式?,c#,xml,xpath,xml-namespaces,C#,Xml,Xpath,Xml Namespaces,我有一些XML是通过JSON响应流的默认转换生成的,因此没有声明名称空间。现在我想使用SelectSingleNode方法从该XML检索特定节点,但无法指定名称空间,因为没有指定名称空间。我应该使用什么来注册名称空间 我的XML如下所示: <root type="object"> <customer type="object"> <firstName type="string">Kirsten</firstName> <l
<root type="object">
<customer type="object">
<firstName type="string">Kirsten</firstName>
<lastName type="string">Stormhammer</lastName>
</customer>
</root>
这总是返回null
我还尝试使用本地名称限定符(不使用命名空间管理器):
这也会返回null。然后您可以用一种更简单的方法来执行,而不涉及
XmlNamespaceManager
和名称空间前缀:
XmlDocument document = new XmlDocument();
document.LoadXml(customerXml);
XmlNode customerNode= document.SelectSingleNode("/root/customer");
[]1)您是否尝试过只使用“客户”而不添加名称空间。2) 如果可能的话,看一看Linq to XML,它是一个更好的XML DOM。没有C#的线索,但是如果没有命名空间,为什么不干脆取消命名空间管理器呢?我试过只使用“customer”,没有命名空间,但这不起作用,因为我需要完整路径“/root/customer”。我假设问题是因为我没有使用名称空间管理器,这就是为什么我尝试这样做。现在解决了!谢谢,这就是答案。我的问题是XPath中没有包含根元素。
XmlDocument document = new XmlDocument();
document.LoadXml(customerXml);
XmlNode customerNode= document.SelectSingleNode("/*[local-name()='root']/*[local-name()='customer']");
XmlDocument document = new XmlDocument();
document.LoadXml(customerXml);
XmlNode customerNode= document.SelectSingleNode("/root/customer");