我想知道用“LINQ”实现这个xpath查询的“最佳实践”方式(在C#中):
/topNode/middleNode[@filteringAttribute='filterValue']/penultimateNode[@anotherFilterAttribute='somethingElse']/nodesIWantReturned
我想要一个'nodesIWantReturned'的IEnumerable列表,但只能从XML树的某个部分开始,这取决于祖先属性的值。
答案 0 :(得分:10)
除了显示的Linq方法之外,您还可以导入System.Xml.XPath
命名空间,然后使用XPathSelectElements
扩展方法直接使用XPath查询。
在课堂上注意到这些方法比“正确的”Linq-to-XML慢,但是很多时候这并不太重要,有时候使用XPath更容易(肯定很多)更简洁!)。
var result = doc.XPathSelectElements("your xpath here");
答案 1 :(得分:3)
var result = root.Elements("topNode")
.Elements("middleNode")
.Where(a => (string)a.Attribute("filteringAttribute") == "filterValue")
.Elements("penultimateNode")
.Where(a => (string)a.Attribute("anotherFilterAttribute") == "somethingElse")
.Elements("nodesIWantReturned");
答案 2 :(得分:0)
更多口头解决方案:
var nodesIWantReturned = from m in doc.Elements("topNode").Elements("middleNode")
from p in m.Elements("penultimateNode")
from n in p.Elements("nodesIWantReturned")
where m.Attribute("filteringAttribute").Value == "filterValue"
where p.Attribute("anotherFilterAttribute").Value == "somethingElse"
select n;