使用XPath,C#解析XML文档

Ver*_*rix 4 c# xml xpath

所以我试图使用System.XML用C#解析以下XML文档:

<root xmlns:n="http://www.w3.org/TR/html4/">
 <n:node>
  <n:node>
   data
  </n:node>
 </n:node>
 <n:node>
  <n:node>
   data
  </n:node>
 </n:node>
</root>
Run Code Online (Sandbox Code Playgroud)

每个带有命名空间的XPath论文都告诉我要做以下事情:

XmlNamespaceManager mgr = new XmlNamespaceManager(xmlDoc.NameTable);
mgr.AddNamespace("n", "http://www.w3.org/1999/XSL/Transform");
Run Code Online (Sandbox Code Playgroud)

在我添加上面的代码后,查询

xmlDoc.SelectNodes("/root/n:node", mgr);
Run Code Online (Sandbox Code Playgroud)

运行良好,但什么都不返回.下列:

xmlDoc.SelectNodes("/root/node", mgr);
Run Code Online (Sandbox Code Playgroud)

如果我修改XML文件并删除名称空间,则返回两个节点,因此似乎其他所有内容都已正确设置.任何想法为什么它不起作用的命名空间?

非常感谢!

Tim*_*ers 6

如上所述,它是重要的命名空间的URI,而不是前缀.

鉴于您的xml,您可以使用以下内容:

mgr.AddNamespace( "someOtherPrefix", "http://www.w3.org/TR/html4/" );
var nodes = xmlDoc.SelectNodes( "/root/someOtherPrefix:node", mgr );
Run Code Online (Sandbox Code Playgroud)

这将为您提供所需的数据.一旦你掌握了这个概念就变得容易了,特别是当你到达默认命名空间(源xml中没有前缀)时,因为你立即知道你可以为每个URI分配一个前缀并强烈引用你喜欢的文档的任何部分.