源代码如下:
                    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报错,请教高手们如何解决!

解决方案 »

  1.   

    你想要什么结果呢?1. 添加是否为null的判定
    2. 为null时先添加该节点,然后继续后面的操作
      

  2.   

    我这是创建xml文件,前面生成了那个节点啊
    XmlElement xmlelem = xmldoc.CreateElement("", "urlset", "http://www.sitemaps.org/schemas/sitemap/0.9");
      xmldoc.AppendChild(xmlelem);我调试过,这儿能生成
      

  3.   

    既然是你create的,何必要selectsinglenode,直接XmlNode root = xmlelem;不行吗?
      

  4.   

    可以,但是增加url节点的时候还是会用上selectsinglenode啊,
    还是同样的问题
      

  5.   

    我说的是增加xml节点的时候,比如:
                        XmlDocument xmldoc = new XmlDocument();
                        xmldoc.Load(pathfile);                    XmlNode root = xmldoc.SelectSingleNode("/urlset");这个时候也得用SelectSingleNode定位吧,一样报错,求解!
      

  6.   

    临时解决的话,可以这样: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);
      

  7.   

     xnsm.AddNamespace("xx", "http://www.sitemaps.org/schemas/sitemap/0.9");
      XmlNode root = xmldoc.SelectSingleNode("/urlset",xnsm);-->
    XmlNode root = xmldoc.SelectSingleNode("/xx:urlset", xnsm);
      

  8.   

    谢谢7楼,用XmlNode root = xmldoc.SelectSingleNode("/urlset");现在好使了,root的name值是urlset
    这是生成网站地图的代码,加上xx是总报错我才加上的,要求的格式是不能有xx:urlset的
    现在贴上代码,大家帮忙看看为什么SelectSingleNode总为空                    XmlDocument xmldoc = new XmlDocument();
                        xmldoc.Load(pathfile);                    XmlNode root = xmldoc.SelectSingleNode("/urlset");
                        XmlElement xmlnode = xmldoc.CreateElement("", "url", "http://www.sitemaps.org/schemas/sitemap/0.9");                    XmlElement xml1 = xmldoc.CreateElement("","loc","http://www.sitemaps.org/schemas/sitemap/0.9");
                        xml1.InnerText = url;
                        xmlnode.AppendChild(xml1);
                        XmlElement xml2 = xmldoc.CreateElement("","lastmod","http://www.sitemaps.org/schemas/sitemap/0.9");
                        xml2.InnerText = currenttime;
                        xmlnode.AppendChild(xml2);
                        XmlElement xml3 = xmldoc.CreateElement("","changefreq","http://www.sitemaps.org/schemas/sitemap/0.9");
                        xml3.InnerText = "always";
                        xmlnode.AppendChild(xml3);
                        XmlElement xml4 = xmldoc.CreateElement("","priority","http://www.sitemaps.org/schemas/sitemap/0.9");
                        xml4.InnerText = "0.7";
                        xmlnode.AppendChild(xml4);
                        root.AppendChild(xmlnode);                    xmldoc.Save(pathfile);
      

  9.   

    要求的格式是不能有xx:urlset的?
    要使用名称空间,必须要加,要不然就去掉名称空间啊
    XmlElement xmlelem = xmldoc.CreateElement("", "urlset", "http://www.sitemaps.org/schemas/sitemap/0.9");这里是你创建的名称空间
      

  10.   

    谢谢11楼,请看我最初的代码,urlset就是这么生成的
      

  11.   

    9楼的时候写错了
    XmlNode root = xmldoc.DocumentElement好使了
    XmlNode root = xmldoc.SelectSingleNode("/urlset");还是报错
      

  12.   

    XmlNode root = xmldoc.SelectSingleNode("/urlset");还是报错不是告诉你了,吗?要加名称空间,你要不想加,
    XmlElement xmlelem = xmldoc.CreateElement("", "urlset", "http://www.sitemaps.org/schemas/sitemap/0.9");
    就改成
    XmlElement xmlelem = xmldoc.CreateElement("urlset");不加是不行的
      

  13.   

    谢谢14楼,但是我要生成的xml格式如下
    <?xml version="1.0" encoding="UTF-8"?>
    <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
       <url>
          <loc>http://www.域名.com</loc>
          <lastmod>2011-12-25</lastmod>   
          <changefreq>hourly</changefreq>
          <priority>1.0</priority>
       </url> 
    </urlset>用XmlElement xmlelem = xmldoc.CreateElement("urlset");不行啊
    用属性也能行,给urlset加上属性xmlns和空间的写法有区别吗?
      

  14.   

    xmlns定义的是默认名称空间,下面的节点都属于这个名称空间下的
      

  15.   

    那我这空间名称为"",SelectSingleNode有办法获取节点吗
      

  16.   

    不是告诉你怎么取了吗?
    名称空间为空和不为空,SelectSingleNode的方法都是一样的,必须加
    xnsm.AddNamespace("nssss", "http://www.sitemaps.org/schemas/sitemap/0.9");
    XmlNode root = xmldoc.SelectSingleNode("/nssss:urlset",xnsm);
    nssss可以随便取名字。但不能说空