【问题标题】:How do I select the element's string of descendant?如何选择元素的后代字符串?
【发布时间】:2021-09-14 05:21:28
【问题描述】:

如何选择标签“lat”并根据我想要的“eventid”获取值“123”?例如,我想选择<lle:eventid>ID1</lle:eventid>中的<lle:lat>123</lle:lat>而不使用XPath,只使用LINQ to XML

预期输出:

123

下面是xml文件:

    <soapenv:Letter xmlns:soapenv="http://www.w3.org/2001/12/soap-envelope" soapenv:encodingStyle="http://www.w3.org/2001/12/soap-encoding" >
        <soapenv:Body xmlns:lle="http://www.aab.org/lifelogevents" >
            <lle:Event>
                <lle:eventid>ID1</lle:eventid>
                <lle:tweet>
                    <lle:text>This is some tweet in my day</lle:text>
                    <lle:location>
                        <lle:lat>123</lle:lat>
                        <lle:long>456</lle:long>
                    </lle:location>
                </lle:tweet>                              
            </lle:Event>
            <lle:Event>
                <lle:eventid>ID2</lle:eventid>
                    <lle:instagram-post-update>
                        <lle:text>This is some status update in my day</lle:text>
                        <lle:location>
                          <lle:lat>789</lle:lat>
                          <lle:long>987</lle:long>
                        </lle:location>
                    </lle:instagram-post-update>
                </lle:Event>
        </soapenv:Body>
    </soapenv:Letter>

到目前为止,这是我的 C# 代码:

XDocument xmldoc = XDocument.Load(@"C:\Users\JACK\source\repos\LINQ_Learn\LINQ_Learn\xmlFile.xml");
            XNamespace lle = "http://www.aab.org/lifelogevents";
            XNamespace soapenv = "http://www.w3.org/2001/12/soap-envelope";


var lati = from data in xmldoc.Descendants(nlle + "Event")
                   where (string)data.Element(nlle + "eventid") == "ID1"
                   select data.Element(nlle + "lat").Value;

        foreach(var lat in lati)
        {
            Console.WriteLine(lat);
        }

【问题讨论】:

    标签: c# linq-to-xml


    【解决方案1】:

    这是一个使用 Linq 来导航 xml 的解决方案。首先我们得到所有的后代“事件”,然后通过定义的“eventid”值过滤它们,然后返回它们的“lat”节点。 FirstOrDefault() 返回第一个匹配项,如果没有找到则返回空值。最后,? 符号用于返回匹配的值,仅当它不为空时,否则它会抛出异常。

    var lat = xmldoc.Descendants(lle + "Event")
                        .Where(x => x.Element(lle + "eventid").Value == "ID1")
                            .Descendants(lle + "lat")
                                .FirstOrDefault()?.Value;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-19
      • 2019-04-27
      • 2015-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多