今天打算用C#读取一下sitemap.xml,然后看看网站里面有哪些页面没有收录,结果却搞了好久,怎么也读不到node,通过百度终于解决。记录一下,有2个知识点。xml是有sitemap生成器生的
<?xml version="1.0" encoding="utf-8"?> <!--This Site Map File was generated by http://www.linglihu.com at Tue, 24 Mar 2015 11:28:13 GMT--> <urlset xmlns="http://www.google.com/schemas/sitemap/0.84"> <url> <loc>http://www.abc.net/</loc> <lastmod>2015-03-23</lastmod> <changefreq>weekly</changefreq> <priority>0.4</priority> </url> </urlset>
1.尝试读取url节点的内容,返回结果一直是null
产生这个问题的原因就在于上面的xml文档中使用了命名空间,当xml中定义了命名空间时,在查找节点的时候需要使用下面的方法:
XmlNode errorNode = xmldoc.SelectSingleNode("/urlset/url"); XmlNamespaceManager nsMgr = new XmlNamespaceManager(xmldoc.NameTable); nsMgr.AddNamespace("ns", "http://www.google.com/schemas/sitemap/0.84"); XmlNode errorNode = xmldoc.SelectSingleNode("/ns:urlset/ns:url", nsMgr);
2读取的时候,告诉编译器让它忽略掉里面的注释信息.修改如下:
XmlDocument xmlDoc = new XmlDocument(); XmlReaderSettings settings = new XmlReaderSettings(); settings.IgnoreComments = true;//忽略文档里面的注释 XmlReader reader = XmlReader.Create(url, settings); xmlDoc.Load(reader);
不要忘记:reader.Close();
解决了上面2个问题,读取我这个sitemap就没问题了。
更多关于xml的读写 并且这两个解决办法的地址:
http://www.cnblogs.com/linlf03/archive/2011/11/30/2268705.html
http://www.cnblogs.com/a1656344531/archive/2012/11/28/2792863.html
感谢2位作者详细的介绍
评论前必须登录!
注册