none
关于生成xml文件标签错乱问题 RRS feed

  • 问题

  • 是这样,在生成xml文件时,出现开始标签与结束标签不一致,如开始标签是<loc> 而结束标签就乱了如<credfe.dff>什么的,而且有时还会出现多余标签如xml文档最后的标签是</urlset>那么生成完就有两个这样的标签如</urlset></urlset>出现两次,当然前提是,我的数据量很大,每个文件要5m左右,而且一次生成的文件数也很多在几百个文件吧,但是错误不是每个xml文件都有,只是个别的文件出现这样的问题,不知道是数据错误导致的,还是写文件时,我调试时用了些方法,如设置值为null,或调试时跳过些生成标签代码在往下走,怎么都不行,就是找不到原因,帮忙看下,可能是那里出了问题,谢谢,大概的生成xml代码如下。

    #region 写数据

                XmlDocument doc = new XmlDocument();
                XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
                doc.AppendChild(dec);
                XmlElement root = doc.CreateElement("urlset");//根节点
                doc.AppendChild(root);
                if (dt != null && dt.Rows.Count > 0)
                {
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        try
                        {
                            DataRow dr = dt.Rows[i];
                            XmlElement url = doc.CreateElement("url");
                            root.AppendChild(url);
                            XmlElement loc = doc.CreateElement("loc");//子节点带值
                            loc.InnerText = dr["UrlLoc"].ToString();
                            url.AppendChild(loc);
    //。。。这里可能还有很多节点,也有不止一个层级的节点,在此省略。
    XmlElement HouseDecoration = doc.CreateElement("Decoration");//子节点带值
                            HouseDecoration.InnerText = dr["Decoration"].ToString();
                            url.AppendChild(HouseDecoration);
                            root.AppendChild(url);
                        }
                        catch (Exception ex)
                        {
                            Common.WritErrorLog(ex.ToString());
                        }
                    }
                }
                MemoryStream stream = new MemoryStream();
                XmlTextWriter writer = new XmlTextWriter(stream, Encoding.UTF8);
                writer.Formatting = Formatting.Indented;
                doc.Save(writer);
                StreamReader reader = new StreamReader(stream, Encoding.UTF8);
                stream.Position = 0;
                String content = reader.ReadToEnd();
                content = content.Replace("encoding=\"utf-8\"?", "encoding=\"utf-8\" ?");
                reader.Close();
                stream.Close();
                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }
                File.WriteAllText(@"磁盘路径", content, Encoding.UTF8);
                #endregion
    2015年1月17日 11:32