XML是一项热门的技术它之所以能够引起人们的兴趣一个主要的原因在于它十分的简单人们可以很容易地理解和使用它每一个程序员都能轻易地看懂一个XML文件理解它包含的内容
NET中包含了很多支持XML的类这些类使得程序员使用XML编程就如同理解XML文件一样简单在这篇文章中我将给出这样的一个类的使用示例这个类就是XmlTextWriter类
XmlTextWriter类允许你将XML写到一个文件中去这个类包含了很多方法和属性使用这些属性和方法可以使你更容易地处理XML为了使用这个类你必须首先创建一个新的XmlTextWriter对象然后你可以将XML片断加入到这个对象中这个类中包含了不少的方法用于将各种类型的XML元素添加到XML文件中下表给出了这些方法的名字和描述情况
方法
描述
WriteStartDocument
书写版本为的 XML 声明
WriteEndDocument
关闭任何打开的元素或属性
Close
关闭流
WriteDocType
写出具有指定名称和可选属性的 DOCTYPE 声明
WriteStartElement
写出指定的开始标记
WriteEndElement
关闭一个元素
WriteFullEndElement
关闭一个元素并且总是写入完整的结束标记
WriteElementString
写出包含字符串值的元素
WriteStartAttribute
书写属性的起始内容
WriteEndAttribute
关闭上一个 WriteStartAttribute 调用
WriteRaw
手动书写原始标记
WriteString
书写一个字符串
WriteAttributeString
出具有指定值的属性
WriteCData
写出包含指定文本的 <![CDATA[]]> 块
WriteComment
写出包含指定文本的注释 <!>
WriteWhiteSpace
写出给定的空白
WriteProcessingInstruction
写出在名称和文本之间带有空格的处理指令如下所示<?name text?>
如果你对于XML十分熟悉那么你一定能很好的理解上面的这些方法下面我们将给出一个例子在这个例子中我们将先创建一个文档添加一些元素然后关闭这个文档添加了元素后你还可以添加子元素属性和其他内容下面的代码就是这样的一个例子它创建了一个文件名为title的XML文件
using System;
using SystemIO;
using SystemXml;
public class Sample
{
public static void Main()
{
XmlTextWriter writer = new XmlTextWriter(titlesxml null);
//写入根元素
writerWriteStartElement(items);
//加入子元素
writerWriteElementString(title Unreal Tournament );
writerWriteElementString(title C&C: Renegade);
writerWriteElementString(title Dr Seusss ABC);
//关闭根元素并书写结束标签
writerWriteEndElement();
//将XML写入文件并且关闭XmlTextWriter
writerClose();
}
}
如果你编译并且执行上面的代码你将创建这个XML文件文件中包含如下内容
<items><title>Unreal Tournament </title><title>
C&C: Renegade</title><title>Dr Seusss ABC
</title></items>
上面的代码创建了一个名为writer的XmlTextWriter对象当这个对象被创建时它被关联到一个名为titlesxml的文件接着程序创建了一个叫做items的根属性WriteStartElement方法创建了这个属性的开始标签接下来程序调用了WriteElementString方法创建了三个子元素从上面的代码你还可以看到这个方法使用第一个参数(在上面的程序中是title)作为元素的标签使用第二个参数作为元素的值当你添加了所有的元素后你需要关闭根元素这时你可以调用WriteEndElement方法关闭那个最近被打开的元素在本例中这个最近被打开的元素就是根元素当所有的数据都已经写好根元素也已经关闭时你可以将信息传送给你的XmlTextWriter这意味着这时候你可以调用Close方法关闭它了
上面的代码相对十分的简单下面我们看一个使用了XmlTextWriter类中更多方法功能更加完善的例子
using System;
using SystemIO;
using SystemXml;
public class Sample
{
public static void Main()
{
XmlTextWriter writer = new XmlTextWriter(myMediaxml null);
//使用自动缩进便于阅读
writerFormatting = FormattingIndented;
//书写根元素
writerWriteStartElement(items);
//开始一个元素
writerWriteStartElement(item);
//向先前创建的元素中添加一个属性
writerWriteAttributeString(rating R);
//添加子元素
writerWriteElementString(title The Matrix);
writerWriteElementString(format DVD);
//关闭item元素
writerWriteEndElement(); // 关闭元素
//在节点间添加一些空格
writerWriteWhitespace(\n);
//使用原始字符串书写第二个元素
writerWriteRaw(<item> +
<title>BloodWake</title> +
<format>XBox</format> +
</item>);
//使用格式化的字符串书写第三个元素
writerWriteRaw(\n <item>\n +
<title>Unreal Tournament </title>\n +
<format>CD</format>\n +
</item>\n);
// 关闭根元素
writerWriteFullEndElement();
//将XML写入文件并关闭writer
writerClose();
}
}
上面代码编译运行后将得到myMediaxml文件文件的内容为
<items>
<item rating=R>
<title>The Matrix</title>
<format>DVD</format>
</item>
<item><title>BloodWake</title><format>XBox</format></item>
<item>
<title>Unreal Tournament </title>
<format>CD</format>
</item>
</items>
上面代码中的注释说明了这个程序的功能是如何实现的需要记住的一件事是当调用方法开始一个操作时你需要在程序的合适的地方调用方法结束这个操作例如你调用了StartElement你就必须调用EndElement关闭元素当然在这两个调用之间你也可以加入一个子元素无论你何时调用EndElement方法它总是关闭最近使用StartElement方法打开的那个元素(这和栈的工作方式很相似)
使用XmlTextWriter十分的容易不过我还是建议你自己动手试试这些代码和方法你试过以后会发现这些代码能够很容易地集成到你的程序中你还应该记住XmlTextWriter仅仅是NET提供的众多XML类中的一个和XmlTextWriter一样其他的XML类也十分的容易使用