c# - 使用 XDocument 和 LINQ 解析具有元素对的 XML

标签 c# .net xml linq linq-to-xml

我正在尝试使用 XDocument 来解析 xml 文档,但是我对 XML 还很陌生,过去只主要使用过 JSON。到目前为止,我可以解析每个报告名称,但仍试图解析参数列表。当没有节点区分不同参数时,如何解析参数列表?

var reports = xml.Descendants("Report").Select(reportElement => new
{
    Name = reportElement.Attribute("Name").Value,
    Parameters = reportElement.Descendants("ParameterList").Select(parameter => new
    {
    })
});

XML:

<ReportList>
    <Report Name="JobNotClose">
        <ParameterList>
            <Name>@StationCode</Name><Value>LAX</Value>
            <Name>@ShipmentType</Name><Value>SE|SI</Value>
        </ParameterList>
    </Report>
    <Report Name="JobWithoutSales">
        <ParameterList>
            <Name>@StationCode</Name><Value>PA</Value>
            <Name>@JobDateFrom</Name><Value>2013-10-1</Value>
            <Name>@JobDateTo</Name><Value>2013-10-31</Value>
        </ParameterList>
    </Report>
</ReportList>

最佳答案

您可以使用Enumerable.Zip将参数名称序列与参数值序列合并:

var reports = from r in xml.Root.Elements("Report")
              let parameters = r.Element("ParameterList")
              select new {
                  Name = (string)r.Attribute("Name"),
                  Parameters = parameters.Elements("Name")
                                         .Zip(parameters.Elements("Value"), 
                                              (n,v) => new { 
                                                  Name = (string)n, 
                                                  Value = (string)v 
                                              })
              };

这提供了以下报告集合:

[
  {
    "Name": "JobNotClose",
    "Parameters": [
      {
        "Name": "@StationCode",
        "Value": "LAX"
      },
      {
        "Name": "@ShipmentType",
        "Value": "SE|SI"
      }
    ]
  },
  {
    "Name": "JobWithoutSales",
    "Parameters": [
      {
        "Name": "@StationCode",
        "Value": "PA"
      },
      {
        "Name": "@JobDateFrom",
        "Value": "2013-10-1"
      },
      {
        "Name": "@JobDateTo",
        "Value": "2013-10-31"
      }
    ]
  }
]

关于c# - 使用 XDocument 和 LINQ 解析具有元素对的 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20630641/

相关文章:

c# - 从本地机器商店中的证书创建 CngKey 以用于 ECDsaCng(CngKey)?

c# - .NET 防火墙权限

c# - Nhibernate对guid的相等限制

.net - .NET 中的文档管理系统

php - 如何使用 PHP 加载 xml 文件?

c# - 如何将数据插入到 asp.net 中现有的 xml 文件中?

c# - 如何使用身份框架在 C# 和 ASP.NET 中配置基于角色的访问权限?

c# - 具有多个 STS 的 WIF

c# - .NET Xml 序列化程序可选属性

javascript - Firefox 是否支持 XHTML 页面中的 Javascript?