2010-07-16 67 views
1

我试图从实际上有一个值的XElement得到的所有节点, 我目前使用此代码:如何从XElement获取所有非空节点?

var nodes = from node in elem.Nodes() 
      where node.NodeType == XmlNodeType.Element && 
        ((XElement) node).Value.Length > 0 
      select node; 

是否有运营商构建做这个手术?

感谢

回答

1

我不相信有这样的事情内置的。您确定要包含有子元素,虽然元素?例如:

XElement e = new XElement("Foo", new XElement("Bar")); 
Console.WriteLine(e); 
Console.WriteLine(e.Value.Length); 

这将打印:

<Foo> 
    <Bar /> 
</Foo> 
0 

...所以Foo将被纳入即使它包含了另一个元素“空”节点。那绝对是你的追求?

+0

不,我只想要通过元素的非空叶节点。 这会完成这项工作吗? () 其中!node.HasElements && node.Value.Length> 0 select node; – Arjor 2010-07-16 07:47:54

+0

@Arjor:你可能也想考虑属性...你可能想要测试!element.DescendantNodes()。Any() – 2010-07-16 12:41:38