我是LINQ
的新手,我正试图从提供的<MM109>123456789</NM109>
文件中获取值XML
。我该怎么做?下面也是一些我认为正确的LINQ
语法。
<?xml version="1.0"?>
<Interchange>
<ISA>
</ISA>
<FunctionGroup>
<GS>
</GS>
<Transaction ControlNumber="12345">
<ST>
</ST>
<BHT>
</BHT>
<Loop LoopId="1000A" Name="SUBMITTER NAME">
<NM1>
</NM1>
<PER>
</PER>
</Loop>
<Loop LoopId="1000B" Name="RECEIVER NAME">
<NM1>
</NM1>
</Loop>
<HierarchicalLoop LoopId="2000A" LoopName="b p level" Id="1" ParentId="">
<HL>
</HL>
<PRV>
</PRV>
<Loop LoopId="2010AA" Name="p name">
<NM1>
<NM109>987654321</NM109>
</NM1>
<N3>
</N3>
<N4>
</N4>
<REF>
</REF>
<PER>
</PER>
</Loop>
</HierarchicalLoop>
<HierarchicalLoop LoopId="2000B" LoopName="SUBSCRIBER HIERARCHICAL LEVEL" Id="2" ParentId="1">
<HL>
</HL>
<SBR>
</SBR>
<Loop LoopId="2010BA" Name="UserName">
<NM1>
<NM109>123456789</NM109>
</NM1>
<N3>
</N3>
<N4>
</N4>
<DMG>
</DMG>
</Loop>
</HierarchicalLoop>
</Transaction>
</FunctionGroup>
</Interchange>
如果我编写下面的代码,我可以获取所有NM109
的值,但我想要的只是NM109
元素的NM1
子级中的Loop LoopId="2010BA" Name="UserName"
。如何使用LINQ
完成此操作?
XElement element = XElement.Load(fileName);
IEnumerable<XElement> transactions = element.Elements();
foreach (XElement xEle in element.Descendants("NM109"))
{
Console.WriteLine(xEle);
}
答案 0 :(得分:0)
通过此Linq查询,您可以获取具有给定ID的每个循环的后代,其父名称为NM1
foreach (XElement xEle in element.Descendants("Loop").FirstOrDefault(x => x.Attribute("LoopId").Value == "2010AA").Descendants("NM109").Where(x => x.Parent.Name == "NM1"))
{
Console.WriteLine(xEle);
}