c# – 使用Linq to XML查询google sitemap.xml的问题

我有一个 Linq-2- XML查询,如果我创建的谷歌站点地图的urlset元素填充了属性,但如果没有属性存在则可以正常工作.

无法查询

<?xml version="1.0" encoding="utf-8"?>
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
  <loc>http://www.foo.com/index.htm</loc>
  <lastmod>2010-05-11</lastmod>
  <changefreq>monthly</changefreq>
  <priority>1.0</priority>
</url>
<url>
  <loc>http://www.foo.com/about.htm</loc>
  <lastmod>2010-05-11</lastmod>
  <changefreq>monthly</changefreq>
  <priority>1.0</priority>
 </url>
</urlset>

可以查询

<?xml version="1.0" encoding="utf-8"?>
<urlset>
<url>
  <loc>http://www.foo.com/index.htm</loc>
  <lastmod>2010-05-11</lastmod>
  <changefreq>monthly</changefreq>
  <priority>1.0</priority>
</url>
<url>
  <loc>http://www.foo.com/about.htm</loc>
  <lastmod>2010-05-11</lastmod>
  <changefreq>monthly</changefreq>
  <priority>1.0</priority>
 </url>
</urlset>

查询

XDocument xDoc = XDocument.Load(@"C:\Test\sitemap.xml");
var sitemapUrls = (from l in xDoc.Descendants("url")
                           select l.Element("loc").Value);
foreach (var item in sitemapUrls)   
{       
  Console.WriteLine(item.ToString());
}

这是什么原因?

解决方法

请参阅XML中的“xmlns =”标记?您需要指定命名空间.测试代码的以下修改

XDocument xDoc = XDocument.Load(@"C:\Test\sitemap.xml");
XNamespace ns = "http://www.sitemaps.org/schemas/sitemap/0.9";

var sitemapUrls = (from l in xDoc.Descendants(ns + "url")
                    select l.Element(ns + "loc").Value);
foreach (var item in sitemapUrls)
{
    Console.WriteLine(item.ToString());
}

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...