.net 如何在从较大的XDocument中提取的XElement上执行XPath选择?

jogvjijk  于 2023-01-06  发布在  .NET
关注(0)|答案(1)|浏览(104)

假设我将一个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选择?
(希望不需要转换为字符串并重新解析。)

cig3rfwq

cig3rfwq1#

除非复制或克隆XML结构,否则只需使用相对于上下文节点的路径,如

b.XPathSelectElement("C")

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

相关问题