Попытка получить значение в файле XML с помощью LINQ - PullRequest
0 голосов
/ 26 октября 2018

Я новичок в 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 s в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);
}

1 Ответ

0 голосов
/ 05 ноября 2018

С помощью этого запроса Linq вы получаете всех потомков цикла с заданным идентификатором с именем родителя 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);
}
...