您现在的位置是:首页 >

c遍历文件夹下的文件 遍历现有XML文件,同时写入到新文件中

火烧 2022-06-10 07:45:43 1036
遍历现有XML文件,同时写入到新文件中   用x ath avigator和实体引用  x ath avigator 虽然也是以DOM树方式在内在组织数据 但已经过优化 可对数据进行修改 并且访问灵活
c遍历文件夹下的文件 遍历现有XML文件,同时写入到新文件中

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

  用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 UTF );             //创建调用的实体 second 要写入的文件             static XmlTextWriter x = new XmlTextWriter(sw);             static void Main(string[] args)             {                 XPathDocument doc = new XPathDocument(@ first xml );                 //first 第一个文件                 XPathNavigator navigator = doc CreateNavigator();                 navigator MoveToRoot();                 x Formatting = Formatting Indented;                 CreatFiles( second ); //如果second xml不存在 则在此创建                 WriteRecursive(navigator); //从根节点开始                 x Flush();                 x 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 )                     {                         x WriteEndElement();                     }                 }                 else                     x WriteEndElement();             }             static private void WriteNode(XPathNavigator navigator)             {                 if (navigator NodeType == XPathNodeType Text)                 {                     x WriteString(navigator Value);                     //写文本节点                 }                 else if (navigator Name != string Empty)                 {                     x 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();             }         }

lishixinzhi/Article/program/net/201311/13362  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码