Ниже приведен рабочий код для выравнивания узлов 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 в синтаксис метода 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>