1

私はサービスへの応答として次の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>
4

2 に答える 2

4

Linq-Xml を使用してint要素を選択し、Linq-Objects のToDictionary()拡張メソッドを使用して属性をキーとして選択し、要素の値を辞書の値として選択できます。

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));
于 2012-04-04T11:23:48.330 に答える
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);
于 2012-04-04T11:30:20.663 に答える