Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当文档没有命名空间时,我应该为XmlDocument.SelectSingleNode使用哪个XPath表达式?_C#_Xml_Xpath_Xml Namespaces - Fatal编程技术网

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

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

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

我的XML如下所示:

<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");