遇到特定标签时如何 select 子标签?
How do I select the child tag when specific tag is encountered?
如何为遇到的每个 <lle:tweet>
标签获取标签 <lle:lat>
和 <lle:long>
的值?当前的 C# 代码仅获取第一个 <lle:tweet>
标记的 <lle:lat>
和 <lle:long>
值,并且会重复。不使用 XPath,仅 LINQ 到 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);
}
您可以通过从 tweet
向下钻取在一个语句中投影 lat/lon 对:
XDocument xmldoc = XDocument.Load("...file here...");
XNamespace nlle = "http://www.aab.org/lifelogevents";
XNamespace soapenv = "http://www.w3.org/2001/12/soap-envelope";
var latlons = from tweetTag in xmldoc.Descendants(nlle + "tweet")
.Descendants(nlle + "location")
select new { Lat = tweetTag.Element(nlle + "lat").Value, Lon = tweetTag.Element(nlle + "long").Value};
如何为遇到的每个 <lle:tweet>
标签获取标签 <lle:lat>
和 <lle:long>
的值?当前的 C# 代码仅获取第一个 <lle:tweet>
标记的 <lle:lat>
和 <lle:long>
值,并且会重复。不使用 XPath,仅 LINQ 到 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);
}
您可以通过从 tweet
向下钻取在一个语句中投影 lat/lon 对:
XDocument xmldoc = XDocument.Load("...file here...");
XNamespace nlle = "http://www.aab.org/lifelogevents";
XNamespace soapenv = "http://www.w3.org/2001/12/soap-envelope";
var latlons = from tweetTag in xmldoc.Descendants(nlle + "tweet")
.Descendants(nlle + "location")
select new { Lat = tweetTag.Element(nlle + "lat").Value, Lon = tweetTag.Element(nlle + "long").Value};