热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用System.Xml读写XML整理文档(转)

转载网址:http:www.cnblogs.comsurfskyarchive20070313673625.htmlexample

转载网址:http://www.cnblogs.com/surfsky/archive/2007/03/13/673625.html

 

example
   
   
     
     
     
     
     
     
     
     
     
     
   

XML概念
    Root        XML根节点,只能且必须有一个(以上为LinkLibrary)
    Element     节点元素(如Link)
    Attribute   节点属性(如Cat, Url, Desc)
    Content     内容(非空白文本、CDATA、Element、EndElement、EntityReference 或 EndEntity)节点

System.Xml空间
    以下类适合快速流式读写XML文件(注:DOM适合随机读写)
    XmlReader, XmlWriter,
    XmlTextReader, XmlTextWriter
    XmlValidatingReader, XmlValidatingWriter    添加了DTD和模式验证,因此提供了数据的有效性验证
    XmlNodeReader, XmlNodeWriter                把XmlNode作为其源

节点类型(public enum XmlNodeType)
     XmlDeclaration        XML 声明(例如,)。
     Attribute             属性(例如,id='123')。
     CDATA                 CDATA 节(例如,)。
     Comment               注释(例如,)
     Document              作为文档树的根的文档对象提供对整个 XML 文档的访问。
     DocumentFragment      文档片段。
     DocumentType          由以下标记指示的文档类型声明(例如,)。
     Element               元素(例如,)。
     EndElement            末尾元素标记(例如,
)。
     Entity                实体声明(例如,)。
     EndEntity             由于调用 ResolveEntity 而使 XmlReader 到达实体替换的末尾时返回。 
     EntityReference       实体引用(例如,#)。
     None                  如果未调用 Read 方法,则由 XmlReader 返回。 
     Notation              文档类型声明中的表示法(例如,)。
     ProcessingInstruction 处理指令(例如,)。
     SignificantWhitespace 混合内容模型中标记间的空白或 xml:space="preserve" 范围内的空白。 
     Text                  节点的文本内容。
     Whitespace            标记间的空白。 

------------------------------------------------------------------------
使用XmlTextReader快速读取
------------------------------------------------------------------------
创建
    打开            XmlTextReader reader = new XmlTextReader("*.xml");
    关闭            reader.Close();

属性
    常用
        HasAttributes            获取一个值,该值指示当前节点是否有任何属性。(从 XmlReader 继承。)
        HasValue                 获取一个值,该值指示当前节点是否可以具有非 String.Empty 的 Value。
        AttributeCount           获取当前节点上的属性数。
        Value                    获取当前节点的文本值。
        ValueType                获取当前节点的公共语言运行库 (CLR) 类型。(从 XmlReader 继承。)
        Name                     获取当前节点的限定名。
    其它
        BaseURI                  获取当前节点的基 URI。
        CanReadBinaryContent     获取一个值,该值指示 XmlTextReader 是否实现二进制内容读取方法。
        CanReadValueChunk        获取一个值,该值指示 XmlTextReader 是否实现 ReadValueChunk 方法。
        CanResolveEntity         获取一个值,该值指示此读取器是否可以分析和解析实体。
        Depth                    获取 XML 文档中当前节点的深度。
        Encoding                 获取文档的编码方式。
        EntityHandling           获取或设置一个值,该值指定读取器如何处理实体。
        EOF                      获取一个值,该值指示读取器是否定位在流的结尾。
        IsDefault                获取一个值,该值指示当前节点是否是从 DTD 或架构中定义的默认值生成的属性。
        IsEmptyElement           获取一个值,该值指示当前节点是否为空元素(例如,)。
        Item                     当在派生类中被重写时,获取此属性的值。(从 XmlReader 继承。)
        LineNumber               获取当前行号。
        LinePosition             获取当前行位置。
        LocalName                获取当前节点的本地名称。
        Namespaces               获取或设置一个值,该值指示是否进行命名空间支持。
        NamespaceURI             获取读取器定位在的节点的命名空间 URI(采用 W3C 命名空间规范中定义的形式)。
        NameTable                获取与此实现关联的 XmlNameTable。
        NodeType                 获取当前节点的类型。
        Normalization            获取或设置一个值,该值指示是否正常化空白和属性值。
        Prefix                   获取与当前节点关联的命名空间前缀。
        ProhibitDtd              获取或设置一个值,该值指示是否允许 DTD 处理。
        QuoteChar                获取用于括起属性节点值的引号字符。
        ReadState                获取读取器的状态。
        SchemaInfo               获取作为架构验证结果分配给当前节点的架构信息。(从 XmlReader 继承。)
        Settings                 获取用于创建此 XmlTextReader 实例的 XmlReaderSettings 对象。
        WhitespaceHandling       获取或设置一个值,该值指定如何处理空白。
        XmlLang                  获取当前 xml:lang 范围。
        XmlResolver              设置用于解析 DTD 引用的 XmlResolver。
        XmlSpace                 获取当前 xml:space 范围。

方法
    定位           
        MoveToAttribute            移动到指定的属性。 
        MoveToContent              检查当前节点是否是内容节点, 如果此节点不是内容节点,则读取器向前跳至下一个内容节点或文件结尾。
        MoveToElement              移动到包含当前属性节点的元素
        MoveToFirstAttribute       移动到第一个属性
        MoveToNextAttribute      移动到下一个属性
        Skip                                跳过当前节点的子级。 
        IsStartElement                测试当前内容节点是否是开始标记。
    基本读取           
        Read                       读取一个节点
        ReadString                 将元素或文本节点的内容读取为一个字符串。

    读取特定类型
        ReadBase64                 对 Base64 进行解码并返回解码的二进制字节。
        ReadBinHex                 对 BinHex 进行解码并返回解码后的二进制字节
        ReadChars                  将元素的文本内容读入字符缓冲区。通过连续调用此方法,可以读取大的嵌入文本流。
        ReadValueChunk             读取嵌入在 XML 文档中的大量文本流。 (从 XmlReader 继承。)
        ReadInnerXml               将内部XML节点内容读到一个字符串中
        ReadOuterXml               所有XML节点内容(包括自身节点)

    读取节点
        ReadStartElement           检查当前节点是否为元素并将读取器推进到下一个节点。
        ReadElementString          这是一个用于读取简单纯文本元素的 Helper 方法。
        ReadAttributeValue         将属性值分析为一个或多个 Text、EntityReference 或 EndEntity 节点
        ReadEndElement             检查当前内容节点是否为结束标记并将读取器推进到下一个节点。
        GetAttribute                   获取属性的值。 

    读取内容并转化
        ReadContentAs...           将内容作为指定类型的对象读取。 (从 XmlReader 继承。)
        ReadElementContentAs...    读取当前元素,并将内容作为指定类型的对象返回。 (从 XmlReader 继承。)

    追溯读取
        ReadToFollowing            一直读取,直到找到具有指定限定名的元素
        ReadToDescendant           让 XmlReader 前进到下一个匹配的子代元素。
        ReadToNextSibling          让 XmlReader 前进到下一个匹配的同级元素。
        GetRemainder               获取已缓冲的 XML 剩余部分。
        ReadSubtree                返回新的 XmlReader 实例,此实例可用于读取当前节点及其所有子节点。

------------------------------------------------------------------------
使用XmlTextWriter快速写入
------------------------------------------------------------------------
开闭           
    XmlTextWriter writer = new XmlTextWriter(@"c:\mywriter.xml", null);
    writer.Close();
起止XML文档 (
    writer.WriteStartDocument();
    writer.EndDocument();

声明XML格式
    writer.Formatting  = Formatting.Indented;
    writer.Indentation = 缩进字符数
    writer.IndentChar  = 缩进字符
    writer.QuoteChar   = 单引号|双引号

输出注释 ()
    writer.WriteComment("comment text");

输出元素 (ElementVal)
    writer.WriteElementString("Element", "ElementVal");
    或者
    writer.StartElement("Element");
    writer.WriteString("ElementVal");
    writer.EndElement();

输出元素属性 (ElementVal)
    writer.StartElement("Element");
    writer.WriteAttributeString("Property", "PropertyVal");
    writer.WriteString("ElementVal");
    writer.EndElement();

输出CDATA (....
    WriteCData("....")

输出字符缓冲区文本
    WriteChars(char[], startPos, length)

------------------------------------------------------------------------
读例程
------------------------------------------------------------------------
XML文件
   
   
     
       
        19.95
     

     
       
        24.95
     

   

取每个书节点上的ISBN属性
    using (XmlReader reader = XmlReader.Create("books.xml"))
    {
        reader.ReadToFollowing("book");
        do {
           Console.WriteLine("ISBN: {0}", reader.GetAttribute("ISBN"));
        } while (reader.ReadToNextSibling("book"));
    }

跳到子节点
    using (XmlReader reader = XmlReader.Create("2books.xml"))
    {
        reader.MoveToContent();                 // bookstore
        reader.ReadToDescendant("book");        // 第一个book
        reader.Skip(); //Skip the first book.   // 第二个book
        ...
    }
挖到子节点
    using (XmlReader reader = XmlReader.Create("book3.xml"))
    {
        reader.Read();
        reader.ReadStartElement("book");
            reader.ReadStartElement("title");
                Console.WriteLine("The content of the title element:  {0}", reader.ReadString());
            reader.ReadEndElement();
            reader.ReadStartElement("price");
                Console.WriteLine("The content of the price element:  {0}", reader.ReadString());
            reader.ReadEndElement();
        reader.ReadEndElement();
    }

读到指定位置  
   FileStream fs = new FileStream("..\\..\\..\\books.xml", FileMode.Open);
   XmlTextReader tr = new XmlTextReader(fs);
   while(!tr.EOF)
   {
      // 查找类型为XmlNodeType.Element和名称为title的节点
      if(tr.MoveToContent() == XmlNodeType.Element && tr.Name=="title")
      {
         listBox1.Items.Add(tr.ReadElementString());
      }
      else
      {
         tr.Read();
      }
    }

遍历元素属性
   string fileName = "..\\..\\..\\books.xml";
   XmlTextReader tr = new XmlTextReader(fileName);
   while(tr.Read())
   {
      //check to see if it's a NodeType element
      if(tr.NodeType == XmlNodeType.Element) 
      {
         //if it's an element, then let's look at the attributes.
         for(int i = 0; i             listBox1.Items.Add(tr.GetAttribute(i));
      }
}

------------------------------------------------------------------------
写例程
------------------------------------------------------------------------
     XmlTextWriter writer = new XmlTextWriter (filename, null);

     //Use indenting for readability.
     writer.Formatting = Formatting.Indented;

     //xml声明(Write the XML delcaration. )
     writer.WriteStartDocument();

     //预处理指示(Write the ProcessingInstruction node.)
     String PItext="type='text/xsl' href='book.xsl'";
     writer.WriteProcessingInstruction("xml-stylesheet", PItext);

     //文档类型(Write the DocumentType node.)
     writer.WriteDocType("book", null , null, "");
     //注释(Write a Comment node.)
     writer.WriteComment("sample XML");
     //根元素(Write a root element.)
     writer.WriteStartElement("book");

     //属性值(Write the genre attribute.)
     writer.WriteAttributeString("genre", "novel");
     //属性值(Write the ISBN attribute.)
     writer.WriteAttributeString("ISBN", "1-8630-014");

     //Write the title.
     writer.WriteElementString("title", "The Handmaid's Tale");
     //Write the style element.
     writer.WriteStartElement("style");
     writer.WriteEntityRef("h");
     writer.WriteEndElement();

     //文本元素节点(Write the price.)
     writer.WriteElementString("price", "19.95");

     //[CDATA]
     writer.WriteCData("Prices 15% off!!");

     //Write the close tag for the root element.
     writer.WriteEndElement();
     writer.WriteEndDocument();

     //Write the XML to file and close the writer.
     writer.Flush();
     writer.Close(); 

     //Load the file into an XmlDocument to ensure well formed XML.
     XmlDocument doc = new XmlDocument();
     //Preserve white space for readability.
     doc.PreserveWhitespace = true;
     //Load the file.
     doc.Load(filename); 
     //Display the XML content to the console.
     Console.Write(doc.InnerXml); 

------------------------------------------------------------------------
带验证的读写
------------------------------------------------------------------------
    books.xml
       
       
       
          
             
             
                 Benjamin
                 Franklin
             

              8.99
          

           ...
       

    books.xdr
       
       
          
          
          
          
          
             
                
             

             
                
                
             

          

          
          
          
             
             
             
             
          

          
             
          

       

    cs
        using System.Xml.Schema;
        protected void button1_Click (object sender, System.EventArgs e)
        {
           //change this to match your path structure.
           string fileName = "..\\..\\..\\booksVal.xml";
           XmlTextReader tr = new XmlTextReader(fileName);
           XmlValidatingReader trv = new XmlValidatingReader(tr);
           //Set validation type
           trv.ValidationType=ValidationType.XDR;
           //Add in the Validation eventhandler
           trv.ValidationEventHandler += new ValidationEventHandler(this.ValidationEvent);
           //Read in node at a time       
           while(trv.Read()) 
           {
              if(trv.NodeType == XmlNodeType.Text)
              listBox1.Items.Add(trv.Value);
           }
        }
        public void ValidationEvent (object sender, ValidationEventArgs args)
        {
           MessageBox.Show(args.Message);
        }

转:https://www.cnblogs.com/jybuding/archive/2010/02/09/1666270.html



推荐阅读
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
author-avatar
叶葳蕤1095190287
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有