如何 select 元素的后代字符串?
How do I select the element's string of descendant?
如何 select 标记“lat”并根据我想要的“eventid”获取值“123”?例如,我想 select <lle:lat>123</lle:lat>
of <lle:eventid>ID1</lle:eventid>
不使用 XPath,只是 LINQ to XML only
预期输出:
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);
}
这是一个使用 Linq 导航 xml 的解决方案。首先我们得到所有后代“事件”,然后通过定义的“eventid”值过滤它们,然后 return 它们的“lat”节点。 FirstOrDefault()
return 是第一个匹配项,如果找到 none,则为空值。最后,?
符号仅在不为 null 时才用于 return 匹配值,否则会抛出异常。
var lat = xmldoc.Descendants(lle + "Event")
.Where(x => x.Element(lle + "eventid").Value == "ID1")
.Descendants(lle + "lat")
.FirstOrDefault()?.Value;
如何 select 标记“lat”并根据我想要的“eventid”获取值“123”?例如,我想 select <lle:lat>123</lle:lat>
of <lle:eventid>ID1</lle:eventid>
不使用 XPath,只是 LINQ to XML only
预期输出:
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);
}
这是一个使用 Linq 导航 xml 的解决方案。首先我们得到所有后代“事件”,然后通过定义的“eventid”值过滤它们,然后 return 它们的“lat”节点。 FirstOrDefault()
return 是第一个匹配项,如果找到 none,则为空值。最后,?
符号仅在不为 null 时才用于 return 匹配值,否则会抛出异常。
var lat = xmldoc.Descendants(lle + "Event")
.Where(x => x.Element(lle + "eventid").Value == "ID1")
.Descendants(lle + "lat")
.FirstOrDefault()?.Value;