注册本站  论坛  繁體中文

电脑技巧
手机 | MP3 | MP4 | 显卡 | 主板 | 显示器 | 光存储 | 笔记本 | 网络设备 | 移动存储 | 数码相机
键鼠 | CPU | 音箱 | GPS | 电视 | 服务器 | 投影机 | 机箱电源 | 品牌电脑 | 办公打印 |
| 网站首页 | Cisco | Windows | Linux | Java | Dotnet | Oracle | 网页设计 | 平面设计 | 安全 | 软件应用 | 电脑维修 | 办公维修 |
您现在的位置: 电脑技巧 >> Dotnet >> .NET FRAMEWORK >> Dotnet正文

遍历现有XML文件,同时写入到新文件中

文章来源:中国IT实验室搜集整理 作者:佚名 更新时间:2008-8-23 15:16:54 【 】 【加入收藏

        用xpathnavigator和实体引用.

        xpathnavigator,虽然也是以DOM树方式在内在组织数据,但已经过优化,可对数据进行修改,并且访问灵活,对比XML.LOAD()方式,在效率上提升了不少.

        在追加时采用实体引用,这样不会把新XML文件全部载入内存,用流的方式追加到文件末尾,省资源,速度快,当文件较大时尤为明显.

         using System.Xml;
        using System.Xml.XPath;
        using System.IO;
        class Program
         {
             static StreamWriter sw = new StreamWriter(@"second.txt", true, Encoding.UTF8);
             //创建调用的实体 ,second---要写入的文件
             static XmlTextWriter xtw = new XmlTextWriter(sw);
             static void Main(string[] args)
             {
                 XPathDocument doc = new XPathDocument(@"first.xml");
                 //first---第一个文件
                 XPathNavigator navigator = doc.CreateNavigator();
                 navigator.MoveToRoot();
                 xtw.Formatting = Formatting.Indented;
                 CreatFiles("second"); //如果second.xml不存在,则在此创建
                 WriteRecursive(navigator); //从根节点开始
                 xtw.Flush();
                 xtw.Close();
             }
             static private void WriteRecursive(XPathNavigator navigator)
             {
                 if (navigator.HasChildren)
                 {
                     navigator.MoveToFirstChild();
                     WriteNode(navigator);
                     WriteRecursive(navigator);
                     navigator.MoveToParent();
                     while (navigator.MoveToNext())
                     {
                         WriteNode(navigator);
                         WriteRecursive(navigator);
                     }
                     if (navigator.MoveToParent() && navigator.Name != "root")
                     {
                         xtw.WriteEndElement();
                     }
                 }
                 else
                     xtw.WriteEndElement();
             }
             static private void WriteNode(XPathNavigator navigator)
             {
                 if (navigator.NodeType == XPathNodeType.Text)
                 {
                     xtw.WriteString(navigator.Value);
                     //写文本节点
                 }
                 else if (navigator.Name != string.Empty)
                 {
                     xtw.WriteStartElement(navigator.Name);
                     //写元素节点
                 }
             }
             static private void CreatFiles(string M_str_fname)
             {
                    XmlTextWriter xWriter = new XmlTextWriter(M_str_fname + ".xml", Encoding.Default);
                    xWriter.Formatting = Formatting.Indented;
                    xWriter.WriteStartDocument();
                    xWriter.WriteComment(M_str_fname);
                    string name = M_str_fname + ".txt"; //实体文件全名
                    xWriter.WriteDocType("Log", null, null, " <!ENTITY Log SYSTEM '" + name + "'>");//声明调用文件
                    xWriter.WriteStartElement("", M_str_fname, "");//引入调用文件
                    xWriter.WriteEntityRef("Log");
                    xWriter.WriteEndElement();
                    xWriter.WriteEndDocument();
                    xWriter.Flush();
                    xWriter.Close();
             }
         }

        在vs2008下调试通过.

  • 上一篇Dotnet:

  • 下一篇Dotnet:
  • 最 新 热 门
     SOA and Web services 新手入门i学习
     浅谈Web Services版本控制
     J2EE vs .NET-建置XML WebServices
     利用.NET FileStreams将DTD插入XML文件中_Q…
     XML开发入门基础:XML和HTML的区别
     带你认识Eclipse XML编辑器
     XML开发入门基础:使用CSS显示XML
     XML开发入门基础:查看 XML 文件
     XML开发入门基础:XML 浏览器支持
     XML开发入门基础:XML 验证
    最 新 推 荐
     如何实现最基本的AJAX框架
     对.NET Framework 反射的反思
     剖析.NET Framework框架
     无法使用MSHFLXGD.OCX控件的解决办法
     详解如何实现最基本的AJAX框架
     Visual Studio 2008的性能改进以及十大新功…
     解读.NET架构核心开发技术
     .net ajax 与Ext2框架在.net程序中的应用
     .Net Framework框架源码学习
     .NET 语言的 using statement 与资源释放
    相 关 文 章

    visual basic 6.0遍历文件夹下所有文件
    VB2003-2008 遍历控件的方法
    Asp遍历服务器对象的代码
    如何用foreach遍历页面上所有的TextBox
    遍历SESSION或APPLICATION对象
    ASP中遍历和操作Application对象的集合
    遍历目录以及目录下文件的函数
    遍历主机的所有IP地址
    ASP.NET2.0 遍历文件夹下所有图片
    ASP.NET遍历配置文件的连接字符串

    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告

     

    Copyright 2006-2008 pcjx.com All Rights Reserved
    电脑技巧 版权所有 粤ICP备06059145号 地图
    本网站所有内容未经许可不得转载或做其他使用