小编Ver*_*rix的帖子

使用XPath,C#解析XML文档

所以我试图使用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文件并删除名称空间,则返回两个节点,因此似乎其他所有内容都已正确设置.任何想法为什么它不起作用的命名空间?

非常感谢!

c# xml xpath

4
推荐指数
1
解决办法
5706
查看次数

使用C#,XPath进行XML解析

我的是关于XML解析实践的一般问题.

假设我们有一个XML文档,我们使用XPath从该文档中获取一些节点:

XMLNode node1=XMLDoc.SelectSingleNode("/SomeNode/SomeOtherNode");
Run Code Online (Sandbox Code Playgroud)

现在n包含SomeOtherNode的数据.直观地说,我希望以下代码行:

XMLNode node2=XMLDoc.SelectSingleNode("/Child");
Run Code Online (Sandbox Code Playgroud)

使用名为"Child"的node1的子节点填充node2.但遗憾的是,它并没有这样的方式.XPath搜索从文档的根开始,而不是从调用它的XMLNode对象开始.有没有办法让它以"直观"的方式工作?这对于递归或面向对象的解析方法来说是方便的.

我尝试过使用XMLPathNavigator对象,但它的工作方式相同.似乎我可以将XMLDocumentFragment的内部文本设置为给定节点的内部文本,但这似乎是一种低效的数据重复.

有任何想法吗?

c# xml xpath

4
推荐指数
1
解决办法
4321
查看次数

标签 统计

c# ×2

xml ×2

xpath ×2