日期:2014-05-18  浏览次数:21009 次

xml SelectSingleNode获取的根节点为null问题
源代码如下:
  XmlDocument xmldoc = new XmlDocument();
  XmlDeclaration xmldecl;
  xmldecl = xmldoc.CreateXmlDeclaration("1.0", "utf-8", null);
  xmldoc.AppendChild(xmldecl);

  XmlElement xmlelem = xmldoc.CreateElement("", "urlset", "http://www.sitemaps.org/schemas/sitemap/0.9");
  xmldoc.AppendChild(xmlelem);

  XmlNamespaceManager xnsm = new XmlNamespaceManager(xmldoc.NameTable);
  xnsm.AddNamespace("xx", "http://www.sitemaps.org/schemas/sitemap/0.9");
  XmlNode root = xmldoc.SelectSingleNode("/urlset",xnsm);
  XmlElement xmlnode = xmldoc.CreateElement("", "url", "");
  XmlElement xml1 = xmldoc.CreateElement("loc");
  xml1.InnerText = url;
  xmlnode.AppendChild(xml1);
  XmlElement xml2 = xmldoc.CreateElement("lastmod");
  xml2.InnerText = currenttime;
  xmlnode.AppendChild(xml2);
  XmlElement xml3 = xmldoc.CreateElement("changefreq");
  xml3.InnerText = "always";
  xmlnode.AppendChild(xml3);
  XmlElement xml4 = xmldoc.CreateElement("priority");
  xml4.InnerText = "0.7";
  xmlnode.AppendChild(xml4);
  root.AppendChild(xmlnode);
  xmldoc.Save(pathfile);

由于root为null,root.AppendChild报错,请教高手们如何解决!

------解决方案--------------------
临时解决的话,可以这样:

XmlNode root = xmldoc.DocumentElement;直接取出根,你可以输出root的name看看为何select不出来,我估计是你

XmlNamespaceManager xnsm = new XmlNamespaceManager(xmldoc.NameTable);
xnsm.AddNamespace("xx", "http://www.sitemaps.org/schemas/sitemap/0.9");

这两句导致的,

你可以这样试试看:

XmlNode root = xmldoc.SelectSingleNode("/urlset");

或者,

XmlNode root = xmldoc.SelectSingleNode("/xx.urlset",xnsm);
------解决方案--------------------
不是告诉你怎么取了吗?
名称空间为空和不为空,SelectSingleNode的方法都是一样的,必须加
xnsm.AddNamespace("nssss", "http://www.sitemaps.org/schemas/sitemap/0.9");
XmlNode root = xmldoc.SelectSingleNode("/nssss:urlset",xnsm);


nssss可以随便取名字。但不能说空