xml是一项热门的技术。它之所以能够引起人们的兴趣,一个主要的原因在于它十分的简单,人们可以很容易地理解和使用它。每一个程序员都能轻易地看懂一个xml文件,理解它包含的内容。
.net中包含了很多支持xml的类,这些类使得程序员使用xml编程就如同理解xml文件一样简单。在这篇文章中,我将给出这样的一个类的使用示例,这个类就是xmltextwriter类。
xmltextwriter类允许你将xml写到一个文件中去。这个类包含了很多方法和属性,使用这些属性和方法可以使你更容易地处理xml。为了使用这个类,你必须首先创建一个新的xmltextwriter对象,然后你可以将xml片断加入到这个对象中。这个类中包含了不少的方法用于将各种类型的xml元素添加到xml文件中,下表给出了这些方法的名字和描述情况:
方法 | 描述 |
writestartdocument | 书写版本为“1.0”的 xml 声明 |
writeenddocument | 关闭任何打开的元素或属性 |
close | 关闭流 |
writedoctype | 写出具有指定名称和可选属性的 doctype 声明 |
writestartelement | 写出指定的开始标记 |
writeendelement | 关闭一个元素 |
writefullendelement | 关闭一个元素,并且总是写入完整的结束标记 |
writeelementstring | 写出包含字符串值的元素 |
writestartattribute | 书写属性的起始内容 |
writeendattribute | 关闭上一个 writestartattribute 调用 |
writeraw | 手动书写原始标记 |
writestring | 书写一个字符串 |
writeattributestring | 出具有指定值的属性 |
writecdata | 写出包含指定文本的 <![cdata[...]]> 块 |
writecomment | 写出包含指定文本的注释 <!--...--> |
writewhitespace | 写出给定的空白 |
writeprocessinginstruction | 写出在名称和文本之间带有空格的处理指令,如下所示:<?name text?> |
using system;
using system.io;
using system.xml;
public class sample
{
public static void main()
{
xmltextwriter writer = new xmltextwriter("titles.xml", null);
//写入根元素
writer.writestartelement("items");
//加入子元素
writer.writeelementstring("title", "unreal tournament 2003");
writer.writeelementstring("title", "c&c: renegade");
writer.writeelementstring("title", "dr. seuss's abc");
//关闭根元素,并书写结束标签
writer.writeendelement();
//将xml写入文件并且关闭xmltextwriter
writer.close();
}
}
如果你编译并且执行上面的代码,你将创建这个xml文件,文件中包含如下内容:
<items><title>unreal tournament 2003</title><title>
c&c: renegade</title><title>dr. seuss's abc
</title></items>
上面的代码创建了一个名为writer的xmltextwriter对象。当这个对象被创建时,它被关联到一个名为titles.xml的文件。接着,程序创建了一个叫做items的根属性,writestartelement方法创建了这个属性的开始标签。接下来,程序调用了writeelementstring方法创建了三个子元素。从上面的代码你还可以看到,这个方法使用第一个参数(在上面的程序中是title)作为元素的标签;使用第二个参数作为元素的值。当你添加了所有的元素后,你需要关闭根元素。这时你可以调用writeendelement方法关闭那个最近被打开的元素;在本例中,这个最近被打开的元素就是根元素。当所有的数据都已经写好,根元素也已经关闭时,你可以将信息传送给你的xmltextwriter。这意味着这时候你可以调用close方法关闭它了。
上面的代码相对十分的简单,下面我们看一个使用了xmltextwriter类中更多方法,功能更加完善的例子。
using system;
using system.io;
using system.xml;
public class sample
{
public static void main()
{
xmltextwriter writer = new xmltextwriter("mymedia.xml", null);
//使用自动缩进便于阅读
writer.formatting = formatting.indented;
//书写根元素
writer.writestartelement("items");
//开始一个元素
writer.writestartelement("item");
//向先前创建的元素中添加一个属性
writer.writeattributestring("rating", "r");
//添加子元素
writer.writeelementstring("title", "the matrix");
writer.writeelementstring("format", "dvd");
//关闭item元素
writer.writeendelement(); // 关闭元素
//在节点间添加一些空格
writer.writewhitespace("/n");
//使用原始字符串书写第二个元素
writer.writeraw("<item>" +
"<title>bloodwake</title>" +
"<format>xbox</format>" +
"</item>");
//使用格式化的字符串书写第三个元素
writer.writeraw("/n <item>/n" +
" <title>unreal tournament 2003</title>/n" +
" <format>cd</format>/n" +
" </item>/n");
// 关闭根元素
writer.writefullendelement();
//将xml写入文件并关闭writer
writer.close();
}
}
上面代码编译运行后将得到mymedia.xml文件,文件的内容为:
<items>
<item rating="r">
<title>the matrix</title>
<format>dvd</format>
</item>
<item><title>bloodwake</title><format>xbox</format></item>
<item>
<title>unreal tournament 2003</title>
<format>cd</format>
</item>
</items>
上面代码中的注释说明了这个程序的功能是如何实现的。需要记住的一件事是:当调用方法开始一个操作时,你需要在程序的合适的地方调用方法结束这个操作。例如,你调用了startelement,你就必须调用endelement关闭元素;当然在这两个调用之间你也可以加入一个子元素。无论你何时调用endelement方法,它总是关闭最近使用startelement方法打开的那个元素(这和栈的工作方式很相似)。
使用xmltextwriter十分的容易,不过我还是建议你自己动手试试这些代码和方法。你试过以后会发现这些代码能够很容易地集成到你的程序中。你还应该记住,xmltextwriter仅仅是.net提供的众多xml类中的一个。和xmltextwriter一样,其他的xml类也十分的容易使用。
新闻热点
疑难解答
图片精选