获得最深刻的元素

时间:2012-12-13 08:12:02

标签: c# xml linq-to-xml

我的问题是关于XML到LINQ,我有以下结构:

<Or>
   <value />
      <Or>
         <value />
         <Or> //this is the deepest "or" element i should get in this case
           <value />
           <value />
         </Or>
    </Or>
</Or>

我基本上是以编程方式构建的,但是我的问题是如何获得最深的Or元素?

如果我这样做:

elements.Element("Or"),它只是让我成为第一个顶级元素或......

等待回应。

3 个答案:

答案 0 :(得分:4)

XDocument xDoc = XDocument.Parse(xml); //XDocument.Parse(filename);
var deepestOr = xDoc.Descendants("Or")
                    .First(or => !or.Descendants("Or").Any());

答案 1 :(得分:2)

试试

var bench =  XElement.Parse(@"<Or><value /><Or><value /><Or><value /><value /></Or></Or></Or>");    

var lastOne = bench.Descendants("Or").Where( n => n.NodeType == XmlNodeType.Element).Last();

结果:

<Or>
  <value />
  <value />
</Or>

无论多深,

答案 2 :(得分:0)

这会给你结果:

XDocument doc = XDocument.Parse(@"<Or><value /><Or><value /><Or><value /><value /></Or></Or></Or>");

// take 'Or' node which contains no 'Of' nodes
var deepest = doc.Descendants("Or").Where(node => node.Descendants("Or").Count() == 0);