【问题标题】:Trying to retrieve value in XML file using LINQ尝试使用 LINQ 在 XML 文件中检索值
【发布时间】:2018-10-26 14:45:17
【问题描述】:

我是LINQ 的新手,我正在尝试从提供的XML 文件中获取<MM109>123456789</NM109> 的值。我怎样才能做到这一点?下面还有一些我认为正确的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 值,但我想要的只是NM1 元素的NM1 子元素中的NM109s。如何使用LINQ 完成此操作?

XElement element = XElement.Load(fileName);
IEnumerable<XElement> transactions = element.Elements();

foreach (XElement xEle in element.Descendants("NM109"))
{
    Console.WriteLine(xEle);
}

【问题讨论】:

    标签: c# xml linq-to-xml


    【解决方案1】:

    通过这个 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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多