首页 > 解决方案 > 如何对从较大的 XDocument 中提取的 XElement 执行 XPath 选择?

问题描述

假设我将一个 XML 文档加载到内存中并提取其中的一个元素。例如:

XDocument doc = XDocument.Parse("<A><B><C/></B><D/></A>");
XElement b = doc.Descendants().Where(x => x.Name.LocalName == "B").Single();
Console.WriteLine(b);

这导致<B><C/></B>返回,所以我有一个 XElement 代表原始 XML 文档的一小部分。

我现在想对我提取的那部分执行 XPath 选择。但是,对 XPathSelectElement/s 的试验告诉我,我所有的 XPath 表达式都在原始 XML 文档上进行操作。

b.XPathSelectElement("/A")返回原始文档的根元素。
b.XPathSelectElement("/B")返回空值。
b.XPathSelectElement("/")引发异常“XPath 表达式评估为意外类型 System.Xml.Linq.XDocument。”。

如何仅对 XElement 的内容执行 XPath 选择?
(希望不要转换为字符串并重新解析。)

标签: c#.netxpath

解决方案


除非您复制或克隆 XML 结构,否则您可以简单地使用相对于上下文节点的路径,例如

b.XPathSelectSelectElement("C")

这应该返回<C />元素。
轴始终选择 XML的/文档节点。


推荐阅读