查找具有“缺失”属性的节点

时间:2011-11-02 16:46:34

标签: linq linq-to-xml

我的xml看起来像这样:

<Doc>
  <Thing>
      <ID type="One">Fred</ID>
   </Thing>
   <Thing>
      <ID>Bill</ID>
   </Thing>
   <Thing>
     <ID type="Two">John</ID>
   </Thing>
</Doc>

我可以编写LINQ来查找type =“One”节点。 (或输入=“两个”)

Dim ThingList As IEnumerable(Of XElement) = _
   From el In doc...<Thing>.<ID> _
   Where el.Attribute("type").Value = "One" _
   Select el

如何编写linq查询来查找根本没有type属性的ID节点?

1 个答案:

答案 0 :(得分:3)

如果没有这样的属性,你应该使用Attribute()将返回null / nothing的事实。

在C#中我会使用:

var idsMissingType = doc.Descendants("ID") // Or whatever
                        .Where(x => x.Attribute("type") == null);

我的猜测是你想要的VB是:

Dim ThingList As IEnumerable(Of XElement) = _
   From el In doc...<Thing>.<ID> _
   Where el.Attribute("type") Is Nothing _
   Select el