使用C#,XPath进行XML解析

Ver*_*rix 4 c# xml xpath

我的是关于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的内部文本设置为给定节点的内部文本,但这似乎是一种低效的数据重复.

有任何想法吗?

Pau*_*ane 8

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

这将从根(/)中选择名为"Child"的元素.请注意,您正在对XMLDoc应用调用,而不是在node1 上应用调用,因此它将相对于文档的根目录.我想你想要的是:

XMLNode node2 = node1.SelectSingleNode("Child"); // edit: removed slash
Run Code Online (Sandbox Code Playgroud)

哪个是相对于先前选择的节点的XPath,而不是文档根.

或者,您可以这样做:

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

这将直接选择子节点.