【发布时间】:2019-10-15 15:38:57
【问题描述】:
我有下面的工作代码来展平 xml 节点:
var xml = XDocument.Parse(input);
var headerSection = xml.Descendants("Header");
var subHeaderSection = xml.Descendants("SubHeader");
var body = xml.Descendants("Body");
var activity = body.Descendants("Activity");
var position = body.Descendants("Position");
var positionAmouts = position.Descendants("PositionAmounts").Elements("PositionAmount");
var results = from h in headerSection
from sh in subHeaderSection
from a in activity
from po in position
from pa in positionAmouts
select new List<string>
{
h.Element("Id").Value,
h.Element("OtherId").Value,
h.Element("SomeValue").Value,
sh.Element("SomeValue2").Value,
sh.Element("SomeValue3").Value,
a.Element("ActivityId").Value,
a.Element("ActivityValue").Value,
po.Element("PositionId").Value,
pa.Element("Amount1").Value,
pa.Element("Amount2").Value,
}
此代码运行良好。但实际的 froms 列表比显示的要长。列表发起者变成了一个长长的值列表。
我相信如果我可以将许多 froms 转换为 linq 方法语法,我应该能够在一种方法中生成相同的 List 结果,在该方法中我可以做的事情比列出所有所需的值更好? (就像循环通过一些预定义的元素名称)
编辑:根据要求的示例 xml:
<Root>
<Header>
<Id>123</Id>
<OtherId>456</OtherId>
<SomeValue>abc</SomeValue>
</Header>
<SubHeader>
<SomeValue2>dfg</SomeValue2>
<SomeValue3>fghj</SomeValue3>
</SubHeader>
<Body>
<Activity>
<ActivityId>321</ActivityId>
<ActivityValue>hjk</ActivityValue>
</Activity>
<Position>
<PositionId>654</PositionId>
<PositionAmounts>
<PositionAmount>
<Amount1>10.01</Amount1>
<Amount2>12.63</Amount2>
</PositionAmount>
<PositionAmount>
<Amount1>15.11</Amount1>
</PositionAmount>
</PositionAmounts>
</Position>
</Body>
</Root>
【问题讨论】:
-
能否提供原xml?
-
@vladimir,已添加
标签: c# linq linq-to-xml