|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
c语言的编译器,几乎是所有新平台都有的。因此从这点上看,c语言的程序,比其他任何语言更加容易跨平台。visual|xml 在我的上一篇文章《C#中利用XML――读取XML》中和人人会商了怎样利用.NETFramework中供应的类在C#中读取XML和读取的一些相干观点,那末明天就说一说怎样在C#中编写XML文档,后来我以为用编程的体例往编写XML几乎就是自讨苦吃,厥后想一想仍是以为挺有效的,我想Microsoft那班家伙能编出这些类来应当不是仅仅为了向比尔i盖茨交差吧!至于它的用途嘛……好比说做安装程序啊!我们能够依据在安装过程当中用户所选的选项和一些设置来天生响应的XML文档再依据XML文档来初始化我们的使用程序。朴陋的话不说那末多了,上面我们来懂得一下详细的完成细节。
要编写XML一样是接纳流的观点,在.NET中编写XML的细节是作为XmlWriter类来完成的,但该类是笼统类不克不及够实例化,为此,我们要想在程序中会见它的办法以完成编写XML的希望,必须利用它的派生类XmlTextWriter,该类供应了一系列的属性和办法为我们编写XML做筹办,上面将具体的先容这个类:
机关函数:
publicXmlTextWriter(TextWriter);
publicXmlTextWriter(Stream,Encoding);
publicXmlTextWriter(string,Encoding);
第一个机关函数是把现有的TextWriter实例传送已往,System.IO.TextWriter类是一个有序的字符流
第二个机关函数是把要写进的流作为第一个参数,第二个参数是指定XML文档的编码体例,默许是UTF8,可取Encoding的列举值,流能够是FileStream,MemoryStream,NetworkStream等等
第三个机关函数是把但愿写进的文件名看成一个字符串(假如存在,就重写该文件)传送给第一个参数,第二个参数指定编码体例
经常使用的办法:
WriterStartDocument()和WriterEndDocument()办法:
第一个办法用来编写XML声明部分,如:<?xmlversion=”1.0”encoding=”UTF-8”?>
第二个办法用来封闭任何翻开的元素或属性并将编写重视新设置为Start形态。
WriterStartElement()和WriteEndElement()办法:
第一个办法用来写出指定的入手下手标志,该办法有以下几个重载:
WriterStartElement(stringlocalname)
利用传送的字符串作为元素的当地称号
WriterStartElement(stringlocalname,stringnamespace)
第一个参数指定元素的当地称号,第二个参数指定元素地点的定名空间
WriterStartElement(stringprefix,stringlocalname,stringnamespace)
第一个参数指定元素的前缀,第二个参数指定元素的当地称号,第三个参数指定元素地点的定名空间
第二个办法用来写出与入手下手元素对应的封闭元素,假如入手下手元素不包括任何内容,将用一个”/>”做为封闭元素
WriterStartAttribute()和WriterEndAttribute()办法:
第一个办法用于编写一个属性的开首,该办法有两个重载:
WriterStartAttribute(stringlocalname,stringnamespace)
第一个参数指定属性的当地称号,第二个参数指定属性地点的定名空间
WriterStartAttribute(stringprefix,stringlocalname,stringnamespace)
第一个参数指定属性的前缀,第二个参数指定属性的当地称号,第三个参数指定属性地点的定名空间
第二个办法用于封闭WriterStartAttribute创立的属性
WriterElementString()办法:
该办法能够创立一个包括字符串值的元素,它有以下重载:
WriterElementString(stringlocalname,stringvalue)
假如编写如许的代码:WriterElementString(“para”,”Sometext”)将输入:<para>Sometext</para>
WriterElementString(stringlocalname,stringnamespace,stringvalue)
假如编写如许的代码:WriterElementString(“para”,”http://www.w3.org/ns”,”Sometext”)将输入:<paraxmlns=”http://www.w3.org/ns”>Sometext</para>
假如编写嵌套几级的元素可以使用WriterStartElement()和WriterEndElement()办法,假如编写间接包括内容的元素可使用该办法
WriterAttributeString()办法:
相似与WriterElementString()办法,在利用上假如属性的值傍边不包括实体可间接利用该办法来写出属性,假如属性值包括实体可以使用WriterStartAttribute()和WriterEndAttribute()办法,比方要写出如许的XML――<paraauthor=”Do&0241;a&L.Perez”/>,可编写以下代码:
WriterStartElement(“para”);
WriterStartAttribute(“author”,null);
WriterString(“Do”);
WriterCharEntiry(“~n”);
WriterString(“a”);
WriterCharEntiry(“&”);
WriterString(“L.Perez”);
WriterEndAttribute();
WriterEndElement();
该办法有以下重载:
WriterAttributeString(stringlocalname,stringvalue);
WriterAttributeString(stringlocalname,stringnamespace,stringvalue);
WriterAttributeString(stringprefx,stringlocalname,stringnamespace,stringvalue);
WriterNode(XmlReaderreader,booldefattr)办法:
该办法能够从XmlReader读取器中复制节点并把它们写进XmlWriter流中,第一个参数是XmlReader的实例,第二个参数承受一个布尔值,决意是不是复制元素中的属性,思索上面XML片断:
<para>
<sent>
The<b>XmlWriter</b>classwritesXMLcontenttoaStream.
</sent>
</para>
以下代码复制个中的片断,reader代表XmlReader的实例writer代表XmlWriter类的实例:
while(reader.Read())
{
if(reader.Name==”sent”&&reader.NodeType==XmlNodeType.Element)
{
writer.WriterNode(reader,true);
}
}
失掉以下输入:
<sent>
The<b>XmlWriter</b>classwritesXMLcontenttoaStream.
</sent> WriterComment(stringtext)办法:用于写出正文
WriterString(stringtext)办法:用于写出文本
WriterCData(stringtext)办法:写出CDATA数据块
WriterBase64(byte[]buffer,intindex,intcount)办法:将指定的二进制字节编码为Base64并写出了局文本
Flush():将缓冲区中的一切内容革新到基本流,并同时革新基本流Close():封闭此流和基本流
以上对XmlTextWriter类的一些主要办法做了复杂先容,上面我们就来看一个例程,看看在程序中怎样利用这些办法。
Example1按纽将向一个文件写出XML声明和一个元素节点和节点内的文本,Example2按纽将在Example1的基本上增加属性节点,嵌套元素和文本,WriteNode按纽利用WriterNode()办法在现有读取器中复制该读取器中的一切元素及属性并写到一个新的XML文档中,Example3按纽将写一份完全的XML文档,Example4按纽在Example3按纽的基本上别的天生一份文档并向该文档中追加CDATA部分,Example5按纽将利用WriterBase64()办法对一幅图片举行编码并将编码后的数据写到XML文档中,Example6按纽将利用Example5按纽中天生的XML读取个中数据并对个中编码数据举行解码最初天生一张图片。
以下是功效完成代码:
以下是在WriteNode按纽中要利用到的XML文件:
唐诗.xml
<?xmlversion="1.0"encoding="gb2312"?>
<唐诗>
<五言尽句>
<作者字号="太白">李白</作者>
<题目>静夜思</题目>
<内容>床前明月光,疑是地上霜。举头看明月,垂头思家乡。</内容>
</五言尽句>
<五言尽句>
<作者字号="太白">李太白</作者>
<题目>春晓</题目>
<内容>春眠不觉晓,到处闻啼鸟。夜来风雨声,花落知几。</内容>
</五言尽句>
<五言尽句>
<作者字号="季凌">王之涣</作者>
<题目>登鹤雀楼</题目>
<内容>白天依山尽,黄河进海流。欲穷千里目,更上一层楼</内容>
</五言尽句>
<五言尽句>
<作者>李清照</作者>
<题目>如梦令</题目>
<内容>昨夜风疏雨骤,浓睡不用残酒,试问卷帘人,却道海棠仍旧,知否,知否,应是绿肥红瘦。</内容>
</五言尽句>
</唐诗>前天傍晚我发表了《Java的跨平台就是一句谎言。》,原本就是周末闲来无事,发表一篇略带争议性的博文让大家都来吵吵架,发表自己的看法,根本就没想着谁把谁打倒,一个行业或者是技术阵营是无法用短期口水仗打到对手的。 |
|