Linq to XML,查找特定类别的项目

时间:2011-01-05 15:36:18

标签: linq-to-xml where-clause

我有以下XML结构(来自外部源,执行得不是很好):

<items>
 <item>
   <allkindsofinfo></allkindsofinfo>
   <categories>
    <category>
     <name>cat1</name>
    </category>
    <category>
     <name>cat2</name>
    </category>
    <category>
     <name>cat3</name>
    </category>
   </categories>
  </item>
 <item>
  etcetera

大约有150个项目都包含几个类别。

现在,使用linq,我想获取某个类别中的所有项目。 我在where子句中尝试了以下内容:

item.Element("categories").Elements("category").Elements("name").ToString().Contains("cat2")

这不会返回任何结果,即使我知道它应该。

如果我尝试:

item.Element("categories").Element("category").Element("name").ToString().Contains("cat2")

如果categoryname是项目中的第一个,则返回结果。

如何遍历每个项目的类别名称以查看它是否包含某个字符串并过滤掉这些项目?

非常感谢任何帮助......: - )

1 个答案:

答案 0 :(得分:1)

如果where item.Element("categories").Elements("category").Elements("name").Any(n => n.Value = "cat2")元素值应该恰好是name,那么

cat2应该会这样做。如果name元素应包含“cat2”作为子字符串,则使用where item.Element("categories").Elements("category").Elements("name").Any(n => n.Contains("cat2"))