2012-03-13 2 views
0

my XMLの属性:IsTrue = "true"を持つノードの正しい数を取得できません。私が使用していますRetrieveノードlinqを使用して条件に基づいてXML内でカウントする

コードは次のとおりです。>>>

 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

+0

@Rich: 'select'内のtotalCountの値が2です。つまり、xmlファイルでの両方が読み込まれますが、これは不適切です。私はCount()内でラムダ式を使用しようとしましたが、動作しません。 – spins3

+0

'IsTrue ==" true "'のノードではなく、 'node.Nodes()'ですべてのノードをカウントします。 –

答えて

1

次のLINQクエリを使用して数を取得できます。これは 'Qualities'ノードをつかんでそれをそれ自身の要素に入れています。その後、我々はそれぞれの子孫を見て、次の項目をチェックしています

  1. それは属性
  2. それは
  3. 「IsTrue」という名前の属性が「IsTrue」属性の値が等しい「真」い含まれていますが含まれてい

次に、その基準を満たす要素の数を取得します。これは、「Qualities」ノードが1つしかないと仮定しています。その場合、XElementの品質= element.Element * s *( "品質")を使用する必要があります。 。

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

Chrisに感謝します。それはうまくいった。 – spins3

+0

私はうれしいです!これが役に立つとわかった場合は、回答を受け入れられた回答として選択し、回答を増やすことを検討しますか?これは質問を閉じ、また私にいくつかの信用を与えます。 –

関連する問題