c# - 使用 C#、XPath 进行 XML 解析

标签 c# xml xpath

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

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

XMLNode node1=XMLDoc.SelectSingleNode("/SomeNode/SomeOtherNode");

现在 n 包含了 SomeOtherNode 的数据。凭直觉我会期待以下代码行:

XMLNode node2=XMLDoc.SelectSingleNode("/Child");

用名为“Child”的 node1 的子节点填充 node2。但遗憾的是,它不是那样工作的。 XPath 搜索从文档的根开始,而不是从调用它的 XMLNode 对象开始。有什么办法让它以“直观”的方式工作吗?这对于递归或面向对象的解析方法很方便。

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

有什么想法吗?

最佳答案

XMLNode node2 = XMLDoc.SelectSingleNode("/Child");

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

XMLNode node2 = node1.SelectSingleNode("Child"); // edit: removed slash

这是相对于先前选择的节点的 XPath,而不是文档根。

或者,您可以:

XMLNode node = XMLDoc.SelectSingleNode("/SomeNode/SomeOtherNode/Child")

这将直接选择子节点。

关于c# - 使用 C#、XPath 进行 XML 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1801126/

相关文章:

c# - .NET RichTextBox 撤消

c# - SelectMany() 无法推断类型参数——为什么不呢?

android - 写xml有困难

xml-fo pdf 表 : 'colspan' when the number of columns is dynamic

c# - 如何让 normalize-space() xpath 函数工作?

c# - 如何在 UTF-8 字节数组中找到字符串的起始索引? (C#)

c# - 为什么 String.Trim 不修剪分号?

xml - 如何使用XPath在特定属性范围之间选择值

symfony - 使用 Guzzle 从 html 中提取信息

PHP DOM Xpath 获取图像