2012-03-13 74 views
0

檢索節點計數xml基於條件我無法檢索具有以下屬性的節點的正確計數:IsTrue =「true」my xml。我使用根據條件使用linq

代碼是:>>>

 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 如果任何人有一個想法,請分享...謝謝

+0

是depCnfg.Count == 2還是defCnfg [0] .totalCount == 2? – Rich 2012-03-13 18:02:31

+0

@Rich:'select'中的totalCount值爲2;即在xml文件中都讀取,這是不正確的。我嘗試在Count()內使用lambda表達式,但它不起作用。 – spins3 2012-03-13 18:55:36

+0

您仍然用'node.Nodes()'計數所有節點,而不是'IsTrue ==「true」'的節點。 – 2012-03-14 12:34:17

回答

1

您可以使用以下LINQ查詢來計算。這是抓住'質量'節點並將其放入它自己的元素。然後我們看每一個後代,並檢查以下內容:

  1. 是否包含屬性
  2. 是否含有添加名爲「IsTrue運算」
  3. 請問「IsTrue運算」屬性的值等於「真」

然後它獲得滿足該條件的元素的數量。這假設只有一個'質量'節點。在這種情況下,您將不得不使用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(); 
     } 
+0

謝謝克里斯。這工作。 – spins3 2012-08-25 14:36:02

+0

我很高興!如果你發現這有幫助,你會考慮選擇答案作爲接受的答案,並提高我的反應?這將結束這個問題,並給我一些功勞。 – 2012-08-25 18:14:14