2016-05-19 17 views
0

以下は私のXMLファイルです。XMLファイルをループし、特定のXMLタグ内の値の合計を計算する

<DIMENSION> 
     <id>2</id> 
     <name>A</name> 
     <STATUS> 
     <name>Talk</name> 
     <percentage>-1</percentage> 
     <ID>CT</ID> 
     </STATUS> 
     <STATUS> 
     <name>B</name> 
     <percentage>-1</percentage> 
     <ID>CN</ID> 
     </STATUS> 
     <STATUS> 
     <name>none</name> 
     <percentage>80</percentage> 
     <ID>NONE</ID> 
     </STATUS> 
</DIMENSION> 
<DIMENSION> 
     <id>0</id> 
     <name>C</name> 
     <STATUS> 
     <name>read</name> 
     <percentage>-1</percentage> 
     <ID>UR</ID> 
     </STATUS> 
     <STATUS> 
     <name>D</name> 
     <percentage>-1</percentage> 
     <ID>DC</ID> 
     </STATUS> 
     <STATUS> 
     <name>E</name> 
     <percentage>-1</percentage> 
     <ID>OR</ID> 
     </STATUS>  
     <STATUS> 
     <name>S</name> 
     <percentage>-1</percentage> 
     <ID>SA</ID> 
     </STATUS>  
     <STATUS> 
     <name>X</name> 
     <percentage>95</percentage> 
     <ID>CA</ID> 
     </STATUS> 
</DIMENSION> 

私はXMLファイルをループし、特定のID(IDタグ)の各次元セクション内のパーセンテージ値の合計を求めます。たとえばid 2の場合、すべてのパーセント値を合計したいとします。だから、私の出力は78でなければなりません。同様に、私はIDタグを含むすべてのDIMENSIONタグをループし、パーセンテージを計算します。私はXMLのlinqを使用しており、以下は私が導出したコードです。しかし私の下のコードでは、idタグに関係なくすべてのdimensionタグの全体のパーセンテージがわかりますが、特定のId値を持つdimensionタグのパーセンテージの合計が必要です。私の最初のパーセンテージの出力値は78です。私の2番目のパーセンテージ値の出力は74です。私の3番目と4番目のパーセンテージの出力値は78です。

public static void percentagecalculationallotmentDimension(string XMLpath, "DIMENSION", string "STATUS") 
{ 
    try 
    { 
     byte[] preamble = Encoding.UTF8.GetPreamble(); 
     XDocument doc = XDocument.Load(XMLpath + @"\filterSetsOut5.xml"); 
     foreach (XElement xmltag in doc.Descendants("DIMENSION")) 
     { 
      if (!xmltag.Element("id").Value.Equals("0")) 
      { 
       foreach (XElement xmltag1 in xmltag.Descendants("STATUS")) 
       { 
        int sum = (from nd in doc.Descendants(subsection).Descendants("percentage") 
        select Int32.Parse(nd.Value)).Sum(); 
        break; 
       } 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
     //Logger.Instance.ErrorLog("Error while alloting percentage for" + mainsection + "" + subsection + "section due to" + ex.ToString()); 
    } 
} 
+1

ような何かを試すことができます - すべてが必要とされるよりも右に多く、さらにオーバーです。また、171行のXMLは必要ありません。短い*サンプルファイルだけでなく、完成した*プログラムでは、達成しようとしていることを示しています。 –

+0

IDごとに1つのディメンションタグが存在するのは間違いありませんか?あなたの質問が*すべてのタグのパーセンテージを集計するか、または両方ともではなくただ1つのタグを集計するか、について質問した場合は役に立ちます。 –

+0

あなたはXML文書の作成者ですか? xml形式を変更できますか? –

答えて

0

あなたはあなたのポストの書式にもっと注意を払うしてください。この

var x = XElement.Parse(xml).Elements("DIMENSION"); 
List<int> sums = new List<int>(); 

foreach (var item in x) 
{ 
    try 
    { 
     sums.Add(item.Elements("STATUS").Elements("percentage").Sum(e => int.Parse(e.Value))); 
    } 
    catch(Exception e) 
    { 

    } 
} 
+0

"xml"を何に置き換えるべきですか?私はXML文書の絶対パスで "xml"を置き換えます。私はエラーが発生します。 "引数1: 'System.Xml.Linq.XDocument'から 'string'に変換できません" – stangada

+0

XDocument.Load(path).Elements( "DIMENSION") – Eins

+0

XDocument doc = XDocument.Load(XMLpath + @ "\ filterSetsOut5。 xml "); var x = XDocument.Load(doc).Elements( "DIMENSION"); リスト合計=新しいリスト(); foreach(x内のvarアイテム) { try { sums.Add(item.Elements( "STATUS")。要素( "percentage"))Sum(e => int.Parse(e.Value))) ; }キャッチ(例外e) {}} }エラー3引数1: '文字列' 'にSystem.Xml.Linq.XDocument' へ変換することができません。 – stangada

関連する問題