选择节点Linq到Xml C#

前端之家收集整理的这篇文章主要介绍了选择节点Linq到Xml C#前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
XML文件格式:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <urlset>
  3. <url>
  4. <loc>element1</loc>
  5. <changefreq>daily</changefreq>
  6. <priority>0.2</priority>
  7. </url>
  8. <url>
  9. <loc>element2</loc>
  10. <changefreq>daily</changefreq>
  11. <priority>0.2</priority>
  12. </url>
  13. <urlset>

我想选择所有“loc”节点(element1,element2),但这不起作用!

  1. foreach (XElement item in document.Elements("url").Descendants("loc")) // Change into what?
  2. {
  3. urlList.Add(item.Value);
  4. }
我怀疑问题是你要从document.Elements(“url”)而不是document.Root.Elements(“url”)…所以它正在寻找url的根元素,它不存在.

试试这个:

  1. List<string> urlList = doc.Root.Elements("url")
  2. .Elements("loc")
  3. .Select(x => (string) x)
  4. .ToList();

请注意,我没有在这里使用过Descendants,因为loc元素都直接位于url元素之下.

如果唯一的loc元素是正确的,你可以使用的另一种选择是:

  1. List<string> urlList = doc.Descendants("loc")
  2. .Select(x => (string) x)
  3. .ToList();

(我假设urlList事先是空的……对于这种情况,我喜欢使用LINQ进行整个操作并消除只是添加到集合中的foreach循环.)

编辑:该代码适合我.这是一个简短但完整的程序:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Xml.Linq;
  5.  
  6. class Test
  7. {
  8. static void Main(string[] args)
  9. {
  10. string xml = @"<?xml version=""1.0"" encoding=""UTF-8""?>
  11. <urlset>
  12. <url>
  13. <loc>element1</loc>
  14. <changefreq>daily</changefreq>
  15. <priority>0.2</priority>
  16. </url>
  17. <url>
  18. <loc>element2</loc>
  19. <changefreq>daily</changefreq>
  20. <priority>0.2</priority>
  21. </url>
  22. </urlset>";
  23.  
  24. XDocument doc = XDocument.Parse(xml);
  25. List<string> urlList = doc.Root
  26. .Elements("url")
  27. .Elements("loc")
  28. .Select(x => (string) x)
  29. .ToList();
  30. Console.WriteLine(urlList.Count);
  31. }
  32. }

猜你在找的XML相关文章