• XmlTextWriter学习笔记(转载)


    原本想基于XmlDocument自己写一个Xml编写器,但却发觉状态维护实在麻烦。在阅读《Applied Xml Programming for Microsoft .Net》时,意外发现XmlTextWriter的优越性,于是决定直接使用它进行开发。

    XmlWriter与XmlTextWriter的区别
    一开始我认为既然XmlTextWriter可以用,那XmlWriter也一定可以用,当我写完下面的语句时,编译器报错。
    XmlWriter doc=new XmlWriter();
    原因很简单,XmlWriter是抽象类,自然不能直接实例化。看了书后才知道XmlTextWriter是XmlWriter接口的实现类,因此初始化语句改为
    XmlWriter doc=new XmlTextWriter();

    这样就对了。

    常用函数说明
    1. WriteStartDocument()
    用于写Xml头声明,即<?xml version="1.0" encoding="utf-8">,如果使用该函数的重载函数WriteStartDocument(bool standalone),就可以设置声明的standalone属性,该属性表示该xml文档是否与其他文件独立,即是否需要单独声明节点。
    2. WriteEndDocument()
    该函数尽管不会向xml文件写任何文本,但必须在编写结束时调用,以结束写过程,它会清空XmlTextWriter中维护的所有堆栈和临时信息,类似于Dispose()函数。
    3. WriteStartElement()
    创建当前节点的一个子节点,通常使用WriteStartElement(string LocalName,string Value),其中LocalName表示节点名称,value表示节点的InnerText
    如:WriteStartElement("address","Tian Jing Road");
    生成的xml:<address>Tian Jing Road</address>
    4. WriteEndElement()
    一旦使用过一句WriteStartElement()就必须有对应的WriteEndElement(),当WriteEndElement被执行后,当前指向的节点就会转为父节点,如:
    <shop>
        <address>Tian Jing Road</address>
    </shop>
    在执行WriteStartElement("address","Tian Jing Road")后,当前指向<address>节点,在WriteEndElement被执行后,当前节点指向<shop>节点
    5. WriteStartAttribute()与WriteEndAttribute()
    与节点创建函数用法相同
    6. WriteAttributeString(string LocalName,string value)
    该函数用于创建属性,与WriteStartAttribute()不同的是它不需要EndAttribute(),直接使用就可以了。
    但要注意它与WriteStartAttribute生成的xml的不同之处,看下面的例子:

    WriteStartElement("address"); 
    WriteStartAttribute(
    "state","California");
    WriteEndAttribute();
    WriteEndElement();

    以上代码生成的xml:<address d1p1:state="" xmlns:d1p1="California" />

    WriteStartElement("address"); 
    WriteAttributeString(
    "state","California");
    WriteEndElement();

    以上代码生成的xml: <address state="California" />

    也就是说WriteAttributeString生成的是未处理的原始语句,而WriteStartAttribute()生成的是Xml Schema语句
    7. WriteElementString(string LocalName, string Value)
    与WriteAttributeString的用法相同,其中LocalName为节点名称,Value为节点的InnerText。
    8. WriteString()与WriteRaw()的区别
        WriteString("More >")生成的Xml是More &gt
        WriteRaw("More >")生成的xml是More >
        也就是说WriteString会把敏感字符转换为转义字符,而WriteRaw()则是直接写入,不做任何处理
    9. WriteCData()
        该函数是用来写用CData包裹的字符串,在字符串中有敏感字符时很有用
        WriteCData("More >")生成的Xml是<![CDATA [More >]] >
    10.WriteFullEndElement()
        该函数用来写完整的结束标志,如<address></address>,
        writer.WriteStartElement("address", null);
        writer.WriteFullEndElement();


     
    常用属性说明
    1.Formatting属性的默认值为Formatting.None

    2.XmlTextReader.Indentation属性,表示缩近字符的字符数,Formatting属性为Formatting.Indented时,才会生效
    3.XmlTextReader.IndentChar才会生效,
    IndentChar是缩近字符,一般使用’\t’,当Formatting属性为Formatting.Indented时,才会生效
    4.QuoteChar属性表示封闭字符,默认为双引号
  • 相关阅读:
    爱奇艺笔试题 输出01020304... ...
    ThreadPoolExecutor 中为什么WorkQueue会在corePoolSize满了之后入队
    jvisualvm 的使用
    连续子数组的最大和
    最长连续子序列
    leetcode 需要了解的知识点储备
    java String
    mysql MVCC
    java 批量导出(zip文件)
    java 中接口调用
  • 原文地址:https://www.cnblogs.com/chenying99/p/1997383.html
Copyright © 2020-2023  润新知