使用linq基于条件检索xml中的节点Count

时间:2012-03-13 17:53:40

标签: xml linq

我无法检索具有属性的节点的正确计数:我的xml的IsTrue =“true”。

我使用的代码是:>>>

       Array depCnfg = (from node in xml.Descendants(Qualities).Descendants()
                           where node.Parent.Name == Qualities &&
                           (node.Attribute(ISTRUE).Value.ToString().ToLower() == "true") 
                           select { 
                           totalCount = node.Nodes().Count()}).ToArray();

XML USED: >>>

<Qualities>
 <General>
   <Tag1 IsTrue = "true">
      <SubTag1>0</SubTag1>
   </Tag1>    
   <Tag2 IsTrue = "false">
      <SubTag2>0</SubTag2>
   </Tag2>  
 </General>
</Qualities> 

这里我总是把数量计算为2,但实际上它应该是1。 如果有人有想法请分享...谢谢

1 个答案:

答案 0 :(得分:1)

您可以使用以下LINQ查询来获取计数。这是抓住'Qualities'节点并将其放入自己的元素中。然后我们查看每个后代,并检查以下内容:

  1. 是否包含属性
  2. 是否包含名为“IsTrue”
  3. 的属性
  4. 'IsTrue'属性的值是否等于'true'
  5. 然后它获得符合该标准的元素的计数。这假设只有一个'Qualities'节点。在这种情况下,您必须使用XElement qualities = element.Element * s *(“Qualities”); 。

    string sampleString = "<MAINROOT>" +
                            "<Qualities>" +
                             "<General>" +
                               "<Tag1 IsTrue = \"true\">" +
                                  "<SubTag1>0</SubTag1>" +
                               "</Tag1>" +
                               "<Tag2 IsTrue = \"false\">" +
                                  "<SubTag2>0</SubTag2>" +
                               "</Tag2>" +
                             "</General>" +
                            "</Qualities>" +
                        "</MAINROOT>";
            XElement element = XElement.Parse(sampleString);
            XElement qualities = element.Element("Qualities");
            if (qualities != null)
            {
                int trueCount = element.Element("Qualities")
                .Descendants()
                .Where(x => x.HasAttributes && x.Attribute("IsTrue") != null && x.Attribute("IsTrue").Value == "true")
                .Count();
            }