【问题标题】:how to parse xml like this using linq to a object如何使用 linq 将这样的 xml 解析为对象
【发布时间】:2012-04-04 11:19:15
【问题描述】:

我有以下 xml 作为对服务的响应,我不想将其解析为键值属性对象。但它不工作。回复 - 我想要名称作为 Key prop 和 value 作为对象的 value 属性的对象。

<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>

【问题讨论】:

标签: .net xml linq linq-to-xml


【解决方案1】:

您可以使用 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));

【讨论】:

    【解决方案2】:

    您的 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);
    

    【讨论】:

    • 您知道有一个XDocument.Parse(string xml) 方法,您不必创建一个StringReader()
    • @DaveShaw:感谢您提供的信息 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多