【发布时间】:2021-09-14 09:24:24
【问题描述】:
对于遇到的每个 <lle:tweet> 标签,我如何获取标签 <lle:lat> 和 <lle:long> 的值?当前的 C# 代码仅获取第一个 <lle:tweet> 标记的 <lle:lat> 和 <lle:long> 值,并且重复。不使用 XPath,只使用 LINQ to XML
因为xml文件中只有2个<lle:tweet>标签
预期输出:
Latitude:123
Longitude:456
Latitude:434
Longitude:554
当前输出:
Latitude:123
Longitude:456
Latitude:123
Longitude:456
Latitude:123
Longitude:456
以下是 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>
<lle:Event>
<lle:eventid>ID3</lle:eventid>
<lle:tweet>
<lle:text>This is some tweet in my day</lle:text>
<lle:location>
<lle:lat>434</lle:lat>
<lle:long>554</lle:long>
</lle:location>
</lle:tweet>
</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 tweetElements = from tweetTag in xmldoc.Descendants(nlle + "Event")
select tweetTag.Element(nlle + "tweet");
foreach (var twitElem in tweetElements)
{
var lati = xmldoc.Descendants(nlle + "tweet")
.Descendants(nlle + "lat")
.FirstOrDefault()?.Value;
var lng = xmldoc.Descendants(nlle + "tweet")
.Descendants(nlle + "long")
.FirstOrDefault()?.Value;
Console.WriteLine("Latitude:{0}", lati);
Console.WriteLine("Longitude:{0}", lng);
}
【问题讨论】:
-
有什么问题?当我运行你的代码时,我得到了经纬度。
-
顺便说一下,在使用 SOAP 时,您通常使用生成的客户端,而无需关心 xml。您是否有理由不为这项服务与肥皂客户合作?或者......使用他们的 REST api?
-
@Crowcoder 它只显示第一个“tweet”标签经纬度及其重复
标签: c# xml linq linq-to-xml