我的问题是关于 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/