2012-04-04 23 views
1

我有以下xml作爲對服務的響應,我不想將它解析爲鍵值屬性對象。但它不起作用。迴應 - 我想要對象的名稱作爲Key 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 2012-04-04 11:19:26

+0

可能的重複項:http://stackoverflow.com/questions/670563/linq-to-read- xml – Craig 2012-04-04 11:25:51

回答

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 2012-04-04 11:38:29

+0

@DaveShaw:謝謝你的信息:) – Taher 2012-04-04 12:01:07

4

您可以使用LINQ的XML選擇int元素和LINQ對象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)); 
+2

+1短而甜 – Craig 2012-04-04 11:33:13