2012-04-04 42 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