如何使用“路径”查询 XDocument?
Posted
技术标签:
【中文标题】如何使用“路径”查询 XDocument?【英文标题】:How can I query an XDocument with a 'path'? 【发布时间】:2012-06-27 10:52:12 【问题描述】:我想查询给定路径的 XDocument
对象(例如“/path/to/element/I/want”),但我不知道如何继续。
【问题讨论】:
how to use XPath with XDocument? 的可能重复项 你可以在这里看到一个选择不同路径的例子,有/没有命名空间定义等:***.com/a/38272604/5838538。 【参考方案1】:您可以使用System.Xml.XPath.Extensions
中的方法来执行此操作。
例如,如果要选择单个元素,则可以使用XPathSelectElement()
:
var element = doc.XPathSelectElement("/path/to/element/I/want");
查询不必像您描述的那样是简单的路径,它们使用XPath 语言。
【讨论】:
在 4.5 中,使用 System.Xml.XPath。 @lionheart 这不正是我建议的吗?System.Xml.XPath
命名空间在 .Net 4.5 中当然不是新的。【参考方案2】:
尽管这是一篇较旧的帖子,但应该注意LINQ-to-XML
可以用作System.XML.XPath
的替代品,以根据XDocument
中的路径查找元素
例子:
var results = x.Elements("path").Elements("to").Elements("element").Elements("I").Elements("want").FirstOrDefault();
注意:可能需要更改 LINQ to XML 命令以适应 XML 的实际结构和/或基数。
https://msdn.microsoft.com/en-us/library/bb675156.aspx
【讨论】:
【参考方案3】:我需要做类似的事情。这个repo 有几个单元测试演示使用 XPathEvaluate() 进行 XDocument 查询
【讨论】:
【参考方案4】:类似的东西可能会起作用:
var path = "/path/to/element/I/want";
var route = path.Split(new []'/', StringSplitOptions.RemoveEmptyEntries);
XElement result = null;
foreach (var node in route)
if (result == null)
result = _xmlDocument.Element(node);
else
result = result.Element(node);
return result;
【讨论】:
RemoveEmptyEntries
不是个好主意,//
在 XPath 中有一个特定的含义,就是搜索所有后代。以上是关于如何使用“路径”查询 XDocument?的主要内容,如果未能解决你的问题,请参考以下文章