2012-12-13 45 views
3

我的问题是关于XML到LINQ我哪里有什么如下结构:获取最深或元素

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

我基本上通过recrusion编程方式创建,但我的问题,我宁愿如何得到最深的还是元素?

如果我这样做:

elements.Element("Or"),它只是让我的第一顶元素或....

对于一直等着响应。

+1

如果文档中不同位置存在多个同等深度的“Or”元素,会发生什么情况? –

+0

那里不会是,总会有一个父母,然后是一个父母,然后是孩子或者其他孩子等 – Alnedru

+0

这三个元素中哪一个最深? –

回答

4
XDocument xDoc = XDocument.Parse(xml); //XDocument.Parse(filename); 
var deepestOr = xDoc.Descendants("Or") 
        .First(or => !or.Descendants("Or").Any()); 
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> 

不管它有多深

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);