本文将会涉及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;1213        writer = new XmlTextWriter (filename, null);14        //为使文件易读,使用缩进15        writer.Formatting = Formatting.Indented;1617        //写XML声明18        writer.WriteStartDocument();1920        //引用样式21        String PItext="type='text/xsl' href='book.xsl'";22        writer.WriteProcessingInstruction("xml-stylesheet", PItext);2324        //Write the DocumentType node25        writer.WriteDocType("book", null , null, "<!ENTITY h 'hardcover'>");26        27        //写入注释28        writer.WriteComment("sample XML");29    30        //写一个元素(根元素)31        writer.WriteStartElement("book");3233        // genre 属性34        writer.WriteAttributeString("genre", "novel");35    36        // ISBN 属性37        writer.WriteAttributeString("ISBN", "1-8630-014");3839        //书名元素40        writer.WriteElementString("title", "The Handmaid's Tale");41              42        //Write the style element43        writer.WriteStartElement("style");44        writer.WriteEntityRef("h");45        writer.WriteEndElement(); 4647        //价格元素48        writer.WriteElementString("price", "19.95");4950        //写入 CDATA51        writer.WriteCData("Prices 15% off!!");5253        //关闭根元素54        writer.WriteEndElement();55             56        writer.WriteEndDocument();5758        //缓冲器内的内容写入文件59        writer.Flush();60        writer.Close();  6162        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}

更多相关文章

  1. 详解在XML文档中替换元素名称的方法(图)
  2. XML开发基础-查看XML文件
  3. XML开发基础-XML元素
  4. xml文件正确性验证类的示例代码分析
  5. 详解使用XML Schema定义元素的基本知识(图文)
  6. 详解xmlhttp组件获取远程文件并筛选出目标数据
  7. xml文件如何编辑的详情介绍
  8. 教你如何打开xml文件的详解
  9. XML文件要有根标签(错误)的代码解决分享

随机推荐

  1. Mono登录界面记住密码的控件
  2. android 源码编译同步的小问题
  3. 【android】时间选择器
  4. Android 简单音乐播放器(破烂版,后续更新)
  5. 解决Android studio 启动报错java.lang.R
  6. Android DHT11驱动
  7. android 读取 icon
  8. Android Studio报错:Ignoring unknown pa
  9. android 如何把新建项目的那个 android a
  10. Android开发实现HttpClient工具类