使用XmlDocument的Save方法容易出错的问题

来源:uuBox.net 开发日记  http://www.cnblogs.com/uubox/archive/2007/12/16/996694.html

在使用XmlDocument的Save方法将内容保存到一个XML文件时,有时会发现保存后得到的XML文档会解析不了,并显示“XML只能存在一个根节点”的错误,用记事本打开XML文档看会发现XML文档的末尾会多出几行多余的文本。特别是对XmlDocument进行了移除子节点的操作之后,这个现象经常会遇到。如下面的一段代码:


        
private  XmlDocument loadXml()
        {
            FileStream stream 
=   new  FileStream( " friend.xml " ,
                FileMode.Open, FileAccess.Read);
            XmlDocument doc 
=   new  XmlDocument();
            doc.Load(stream);
            stream.Close();
            
return  doc;
        }

        
private   void  saveXml(XmlDocument doc)
        {
            FileStream stream 
=   new  FileStream( " friend.xml " ,
                FileMode.OpenOrCreate, FileAccess.Write);
            doc.Save(stream);
            stream.Close();
        }


先用loadXml加载XML文档,然后进行查询、插入、删除子节点等操作,最后调用saveXml方法保存,上述的问题就会出现。

那么为什么会出现这样的问题呢?通过查看保存后的XML文档会发现,多余的内容正是原先XML文档的末尾部分的内容,说明在写入文件时没有把原来XML文件整个重写,而只是覆盖上去而已。至此就找到原因了,在saveXml方法里的new FileStream语句打开文件的方式是OpenOrCreate,当写入文件时,如果原文件存在,FileStream是用FileMode.Open方式打开流的,所以doc.Save语句仅仅是覆盖了部分内容而已。解决问题的方法就是将 OpenOrCreate改为Create,让保存时将整个XML替换掉。

总结一下,当我们越来越多地使用数据库和XML文件储存数据时,有时会忘记了XML文件其实是文本文件,内容修改之后如果要保存xml文件,其实都只能整个XML覆盖一遍的,尽管有时只是修改整个xml文档其中的小小一部分。所以如果你的程序有大量的数据需要用xml存储,就需要考虑这些数据是否会经常改动,如果需要经常改动的话,还是用数据库来存储效率要高点。
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值