I am trying to use XDocument
to parse an xml document, however I am pretty new to XML and have only primarily used JSON in the past. So far I can parse each report name but am stuck with trying to parse the parameter list. How do I parse the parameter list when theres no node differentiating the different parameters?
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>
You can use Enumerable.Zip to merge parameter names sequence with parameter values sequence:
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
})
};
That gives following reports collection:
[
{
"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"
}
]
}
]
Collected from the Internet
Please contact [email protected] to delete if infringement.
Comments