[英]Select nodes Linq to Xml C#
XML文件格式:
<?xml version="1.0" encoding="UTF-8"?>
<urlset>
<url>
<loc>element1</loc>
<changefreq>daily</changefreq>
<priority>0.2</priority>
</url>
<url>
<loc>element2</loc>
<changefreq>daily</changefreq>
<priority>0.2</priority>
</url>
<urlset>
我想选择所有“loc”节点(element1,element2),但这不起作用!
foreach (XElement item in document.Elements("url").Descendants("loc")) // Change into what?
{
urlList.Add(item.Value);
}
我怀疑问题是你要从document.Elements("url")
而不是document.Root.Elements("url")
...所以它正在寻找url
的根元素,它不存在。
尝试这个:
List<string> urlList = doc.Root.Elements("url")
.Elements("loc")
.Select(x => (string) x)
.ToList();
请注意,我没有在这里使用过Descendants
,因为loc
元素都直接位于url
元素之下。
如果唯一的 loc
元素是正确的,你可以使用的另一种选择是:
List<string> urlList = doc.Descendants("loc")
.Select(x => (string) x)
.ToList();
(我假设urlList
事先是空的......对于这种情况,我喜欢在整个操作中使用LINQ并消除只是添加到集合的foreach
循环。)
编辑:该代码适合我。 这是一个简短但完整的程序:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;
class Test
{
static void Main(string[] args)
{
string xml = @"<?xml version=""1.0"" encoding=""UTF-8""?>
<urlset>
<url>
<loc>element1</loc>
<changefreq>daily</changefreq>
<priority>0.2</priority>
</url>
<url>
<loc>element2</loc>
<changefreq>daily</changefreq>
<priority>0.2</priority>
</url>
</urlset>";
XDocument doc = XDocument.Parse(xml);
List<string> urlList = doc.Root
.Elements("url")
.Elements("loc")
.Select(x => (string) x)
.ToList();
Console.WriteLine(urlList.Count);
}
}
var xDoc = XDocument.Parse(
@"<urlset>
<url>
<loc>element1</loc>
<changefreq>daily</changefreq>
<priority>0.2</priority>
</url>
<url>
<loc>element2</loc>
<changefreq>daily</changefreq>
<priority>0.2</priority>
</url>
</urlset>");
var locElements = xDoc.Descendants("url").SelectMany(el => el.Descendants("loc"));
尝试这个:
var query = for x in xDoc.Descendants("url")
select (string)x.Element("loc");
foreach (string loc in query)
{
urlList.Add(loc);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.