2012-04-04 13 views
1

サービスに対する応答として次のXMLがありますが、これをキー値プロパティオブジェクトに解析しません。それは動作していません。レスポンス - 私はキーのpropとして名前を持つオブジェクトを、オブジェクトのvalue propとして値を求めます。linqをオブジェクトに使用してxmlを解析する方法

<lst name="industry"> 
    <int name="Accounting">3</int> 
    <int name="Engineering">0</int> 
    <int name="Human Resources and Adminstration">0</int> 
    <int name="Software/IT">0</int> 
+0

3 0を行うことができます 0 0 – Anu

+0

可能な重複:http://stackoverflow.com/questions/670563/linq-to-read- xml – Craig

答えて

1

XMLの形式が正しくありません。私はこれがあなたのXMLの見た目だと信じていますか?

<lst name="industry"> 
<int name="Accounting">3</int> 
<int name="Engineering">0</int> 
<int name="Human Resources and Adminstration">0</int> 
<int name="Software/IT">0</int> 
</lst> 

その場合のために、あなたは...

XDocument result = XDocument.Load(new StringReader("<lst name=\"industry\">" + 
                  "<int name=\"Accounting\">3</int>" + 
                  "<int name=\"Engineering\">0</int>" + 
                  "<int name=\"Human Resources and Adminstration\">0</int>" + 
                  "<int name=\"Software/IT\">0</int>" + 
                  "</lst>"));    


     var tmpTable = (from i in result.Descendants("int") 
         select new 
         { 
          Key = i.Attribute("name"), 
          Value = i.Value 
         }).ToDictionary(t => t.Key, t => t.Value); 
+2

あなたは 'XDocument.Parse (string xml) 'メソッドは' StringReader() 'を作成する必要がありません。 – DaveShaw

+0

@DaveShaw:情報ありがとう:) – Taher

4

あなたの辞書の値とキーと要素の値として属性を選択するにはint要素とLINQの-オブジェクトを選択するためにToDictionary()拡張メソッドをLINQの-XMLを使用してそれを行うことができます。

var xml = @"<lst name=""industry""> 
    <int name=""Accounting"">3</int> 
    <int name=""Engineering"">0</int> 
    <int name=""Human Resources and Adminstration"">0</int> 
    <int name=""Software/IT"">0</int> 
    </lst>"; 

var dict = 
    XDocument.Parse(xml) 
    .Root 
    .Elements("int") 
    .ToDictionary(xe => xe.Attribute("name").Value, xe => int.Parse(xe.Value)); 
+2

+1短くて甘い – Craig

関連する問題