什么是此XPath的LINQ to XML等价物

时间:2009-01-15 22:27:28

标签: c# xml linq xpath

我想知道用“LINQ”实现这个xpath查询的“最佳实践”方式(在C#中):

/topNode/middleNode[@filteringAttribute='filterValue']/penultimateNode[@anotherFilterAttribute='somethingElse']/nodesIWantReturned

我想要一个'nodesIWantReturned'的IEnumerable列表,但只能从XML树的某个部分开始,这取决于祖先属性的值。

3 个答案:

答案 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;