• 技术文章 >后端开发 >XML/RSS教程

    详解读写XML文件的代码案例

    黄舟黄舟2017-03-23 16:41:56原创1543

    本文将会涉及3个方面的内容:
    1.存取XML文件
    2.XML文档对象模型
    3.XML和DataSet

    这里我们先介绍操作XML文件的两个对象:XmlTextReader和XmlTextWriter
    打开和读取Xml文件使用到的对象就是XmlTextReader对象。下面的例子打开了与程序在同一路径下的一个例子文件sample.xml

    XmlTextReader reader = new XmlTextReader("sample.xml");

    然后我们可以通过其Read方法实现自动便利XML文件。例:

    while(reader.Read())
    {
           //在这里填写对于XML的操作代码
    }

    下面我们看一个复杂一些的例子。

    while(reader.Read())
     2{
     3    switch(reader.NodeType)
     4    {
     5        case XmlNodeType.Element:   //当前节点是一个元素
     6              Console.Write("<" + reader.Name);
     7            while(reader.MoveToNextAttribute()) //按照顺序读取下一个属性
     8              Console.Write(" " + reader.Name + "='" + reader.Value + "'");
     9            Console.Write(">");
    10            break;
    11        case XmlNodeType.DocumentType:  //XML文件的类型声明
    12              Console.WriteLine(reader.NodeType + "<" + reader.Name + ">" + reader.Value);
    13            break;
    14        ……
    15        }
    16    }

    从第3行开始我们就根据NodeType属性去判断节点的类型,根据节点的不同类型进行不同的处理。

    下表列出了一些常用的节点类型。

    XmlTextReader的NodeType的取值

    类型

    说明

    All

    所有节点

    Attribute

    一个属性

    CDATA

    转义那些会被看作标记语言(如HTML)的文本

    Comment

    使用<!—和-->分隔的注释

    Document

    XML数据树的根节点

    DocumentType

    文档的类型声明,即<!DOCTYPE…>标记

    Element

    一个元素,通常是XML文件中的实际数据

    EndTag

    元素的结束位置

    None

    不是节点

    Text

    返回元素的文本内容

    XMLDeclaration

    XML声明节点,例如<?xml version=’

    在进行写入XML文件时我们使用的XmlTextWriter类,它是XmlWriter的子类,速度快且不使用缓存,但是同XmlTextReader一样,在写入XML文件时只能向前。

    我们假定要写入的XML文件在C盘根目录下:

    XmlTextWriter writer = new XmlTextWriter("C:\\sample2.xml",null);

    在这里如果不想把数据写入文件,而只是想在命令窗口显示,则可以把“Console.Out”作为参数传递给构造器,此时应把上述语句改为:

    XmlTextWriter writer = new XmlTextWriter(Console.Out);

    下面我们介绍一下写入XML文件数据的一些常用方法:

    XmlTextWriter的常用方法

    方法

    说明

    用法

    WriteStartDocument

    写XML声明部分,即“<?xml version=”?>”

    writer.WriteStartDocument();

    WriteEndDocument

    使没有闭合元素闭合

    writer.WriteEndDocument();

    WriteDocType

    写DOCTYPE声明

    writer.WriteDocType("sample2",null,null,"<!ENTITY h 'hardcover'>");

    WriteStartElement

    写元素的开始标志

    writer.WriteStartElement("sample2");

    WriteEndElement

    写元素的结束标志

    writer.WriteEndElement();

    WriteString

    写入字符串

    writer.WriteString("Pride And Prejudice");

    WriteCData

    写CDATA块,即写入的文字在<![CDATA[…]]>间

    writer.WriteCData("Price 15% off!!");

    WriteRaw

    手工写入一行,不作任何处理

    writer.WriteRaw("this & that");

    WriteEntityRef

    写入实体引用,即前面加“&”后面加“;”

    writer.WriteEntityRef("h");

    WriteProcessingInstruction

    写入处理指令,即前面加“<?”后面加“?>”

    writer.WriteProcessingInstruction("xml-stylesheet",PItext);

    WriteComment

    写入注释,自动加入注释标志“<!--”和“à”

    writer.WriteComment("sample XML");

    Flush

    把缓存中的内容写入文件

    writer.Flush();

    Close

    关闭,如有未闭合的元素,自动闭合

    writer.Close();

    其中WriteString方法会对字符串进行下述处理:

    1.字符“&”、“<”和“>”转化为“&amp;”、“&lt;”和“&gt;”。

    2.ASCII码为0~(十六进制)的字符转化为“&#~“&#”。

    3.如果是在写属性的值则双引号“””转化为“&quot;”;单引号 “’”转化为“&apos;”。

    下面给大家写出一个例程,由于注释比较详细就不作过多解释了。

    using System;
     2using System.IO;
     3using System.Xml;
     4
     5public class Sample
     6{
     7    private const string filename = "sampledata.xml";
     8
     9    public static void Main()
    10    {
    11        XmlTextWriter writer = null;
    12
    13        writer = new XmlTextWriter (filename, null);
    14        //为使文件易读,使用缩进
    15        writer.Formatting = Formatting.Indented;
    16
    17        //写XML声明
    18        writer.WriteStartDocument();
    19
    20        //引用样式
    21        String PItext="type='text/xsl' href='book.xsl'";
    22        writer.WriteProcessingInstruction("xml-stylesheet", PItext);
    23
    24        //Write the DocumentType node
    25        writer.WriteDocType("book", null , null, "<!ENTITY h 'hardcover'>");
    26        
    27        //写入注释
    28        writer.WriteComment("sample XML");
    29    
    30        //写一个元素(根元素)
    31        writer.WriteStartElement("book");
    32
    33        // genre 属性
    34        writer.WriteAttributeString("genre", "novel");
    35    
    36        // ISBN 属性
    37        writer.WriteAttributeString("ISBN", "1-8630-014");
    38
    39        //书名元素
    40        writer.WriteElementString("title", "The Handmaid's Tale");
    41              
    42        //Write the style element
    43        writer.WriteStartElement("style");
    44        writer.WriteEntityRef("h");
    45        writer.WriteEndElement(); 
    46
    47        //价格元素
    48        writer.WriteElementString("price", "19.95");
    49
    50        //写入 CDATA
    51        writer.WriteCData("Prices 15% off!!");
    52
    53        //关闭根元素
    54        writer.WriteEndElement();
    55             
    56        writer.WriteEndDocument();
    57
    58        //缓冲器内的内容写入文件
    59        writer.Flush();
    60        writer.Close();  
    61
    62        
    63        XmlDocument doc = new XmlDocument();
    64        
    65        doc.PreserveWhitespace = true;
    66        //加载文件
    67        doc.Load(filename);  
    68    
    69        //XML文件的内容显示在控制台
    70        Console.Write(doc.InnerXml);  
    71        //等待用户阅读
    72        Console.In.Read();
    73    }
    74}

    以上就是详解读写XML文件的代码案例的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:读写,XML文件
    上一篇:详细介绍解析Xml四种方法的示例代码 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 详细介绍xml的语法的使用和学习• C#对XML读写的代码实例• 具体介绍历数Firefox2.0对XML处理的改进的代码实例(图)• Xml_javascript分页• XML轻松学习手册(2)XML概念
    1/1

    PHP中文网