我正在尝试使用 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/