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);
- }
- }