TinyXML入门 教程.docx_第1页
TinyXML入门 教程.docx_第2页
TinyXML入门 教程.docx_第3页
TinyXML入门 教程.docx_第4页
TinyXML入门 教程.docx_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

如下是一个XML片段:周星星20白晶晶18在TinyXML中,根据XML的各种元素来定义了一些类:TiXmlBase:整个TinyXML模型的基类。TiXmlAttribute:对应于XML中的元素的属性。TiXmlNode:对应于DOM结构中的节点。TiXmlComment:对应于XML中的注释。TiXmlDeclaration:对应于XML中的申明部分,即。TiXmlDocument:对应于XML的整个文档。TiXmlElement:对应于XML的元素。TiXmlText:对应于XML的文字部分。TiXmlUnknown:对应于XML的未知部分。TiXmlHandler:定义了针对XML的一些操作。那我们如何使用这些类以及他们的方法来操纵我们的XML呢?请看下面。一、读取XML(假设我们的Xml文档中的内容与上面的Xml内容一样)/创建一个XML的文档对象。TiXmlDocument*myDocument=newTiXmlDocument(填上你的Xml文件名);myDocument-LoadFile();/获得根元素,即Persons。TiXmlElement*RootElement=myDocument.RootElement();/输出根元素名称,即输出Persons。coutValue()FirstChildElement();/获得第一个Person的name节点和age节点和ID属性。TiXmlElement*NameElement=FirstPerson-FirstChildElement();TiXmlElement*AgeElement=NameElement-NextSiblingElement();TiXmlAttribute*IDAttribute=FirstPerson-FirstAttribute();/输出第一个Person的name内容,即周星星;age内容,即20;ID属性,即1。coutFirstChild()-Valueendl;coutFirstChild()-Valueendl;coutValue()LinkEndChild(RootElement);/创建一个Person元素并连接。TiXmlElement*PersonElement=newTiXmlElement(Person);RootElement-LinkEndChild(PersonElement);/设置Person元素的属性。PersonElement-SetAttribute(ID,1);/创建name元素、age元素并连接。TiXmlElement*NameElement=newTiXmlElement(name);TiXmlElement*AgeElement=newTiXmlElement(age);PersonElement-LinkEndChild(NameElement);PersonElement-LinkEndChild(AgeElement);/设置name元素和age元素的内容并连接。TiXmlText*NameContent=newTiXmlText(周星星);TiXmlText*AgeContent=newTiXmlText(20);NameElement-LinkEndChild(NameContent);AgeElement-LinkEndChild(AgeContent);/保存到文件myDocument-SaveFile(要保存的xml文件名);这样,便创建了一个如下的xml文件:周星星20TinyXML入门教程TinyXML入门教程1什么是XML?1文档类2创建文档对象3输出文档对象3保存文档对象4返回第一个根元素5声明类5注释类6元素类6节点名6父节点6子节点7编辑子节点7同级节点7遍历元素8元素属性8元素函数总结9属性类10什么是XML?XML全称EXtensibleMarkupLanguage,翻译为可扩展标记语言,简而言之就是你可以自定义数据的标识,以此来区分各种不同的数据,以便于进行数据交换,例如html就可以理解为一种简单的xml语言。XML文件通常就是一个文本文件,可以使用任何编码上图就是我系统中一个xml文件的图标,使用VC2005打开它,你可以看到如下内容:XML也是有这几个对象组成了,一般来说我们经常使用的类如下:lTiXmlDocument:文档类,它代表了整个xml文件。lTiXmlDeclaration:声明类,它表示文件的声明部分,如上图所示。lTiXmlComment:注释类,它表示文件的注释部分,如上图所示。lTiXmlElement:元素类,它是文件的主要部分,并且支持嵌套结构,一般使用这种结构来分类的存储信息,它可以包含属性类和文本类,如上图所示。nTiXmlAttribute/TiXmlAttributeSet:元素属性,它一般嵌套在元素中,用于记录此元素的一些属性,如上图所示。nTiXmlText:文本对象,它嵌套在某个元素内部,如上图所示。TinyXml使用文档对象模型(DOM)来解析xml文件,这种模型的处理方式为在分析时,一次性的将整个XML文档进行分析,并在内存中形成对应的树结构,同时,向用户提供一系列的接口来访问和编辑该树结构。这种方式占用内存大,但可以给用户提供一个面向对象的访问接口,对用户更为友好,非常方便用户使用。下面我们依次来介绍各个类的用法。文档类文档类代表一个XML文档,通过它,你可以保存,载入和打印输出文档。你可以通过以下方式载入xml文档到TiXmlDocument。创建文档对象l创建一个空的文档对象,然后载入一个xml文档使用到的函数原形如下:+TiXmlDocument();+boolLoadFile(conststd:string&filename)在程序中你可以如下使用:/载入xml文档TiXmlDocumentdoc();doc.LoadFile(tutorial.xml);l2、在构造函数中传入文档的名称,然后调用load函数完成解析载入使用到的函数原形如下:+TiXmlDocument(conststd:string&documentName);+boolLoadFile();在程序中你可以如下使用:/载入xml文档TiXmlDocumentdoc(tutorial.xml);doc.LoadFile();输出文档对象文档类提供了Print()函数用于在控制台输出当前的文档内容,这个函数的原形如下:+voidPrint()const在程序中你可以如下使用:/载入xml文档TiXmlDocumentdoc(tutorial.xml);doc.LoadFile();doc.Print();/输出文档tutorial.xml的内容如下:Thisatext(这是一个文本)在控制台中你可以得到如下输出:由于文件使用UTF-8编码,而Windows下的控制台默认使用gb2312编码,因此会生成乱码。保存文档对象当然你也可以使用SaveFile()函数来进行另存为,这个函数的原形如下:boolSaveFile(conststd:string&filename)const在程序中你可以如下使用:/载入xml文档TiXmlDocumentdoc(tutorial.xml);doc.LoadFile();doc.Print();/输出文档coutendl;doc.SaveFile(tutorial.txt);使用记事本打开tutorial.txt,你可以看到如下内容。返回第一个根元素另外文档对象还提供了一个实用的函数用于返回第一个根对象,它可以让你方便的遍历整个文档结构,查找自己需要的数据。函数原形如下:+TiXmlElement*RootElement()我们在介绍元素类的时候再详细介绍它的使用。声明类在标准的XML文件中,声明为文件的第一项,例如,声明对象具有三个属性值,版本,编码和独立文件声明一般来说文档的第一行就是声明对象,你可以把文档对象的第一个子节点转换为声明对象。/使用TinyXml的声明对象TiXmlDeclaration*decl;decl=doc.FirstChild()-ToDeclaration();然后就可以使用它的功能了,它可以让你返回当前的版本,编码等信息,函数原形如下:+constchar*Version()const+constchar*Encoding()const+constchar*Standalone()const在程序中你可以如下使用:/使用TinyXml的声明对象TiXmlDeclaration*decl;decl=doc.FirstChild()-ToDeclaration();cout使用TinyXml的声明对象(TiXmlDeclaration)Print(0,4,&str);coutstrendl;/分别输出声明对象的属性cout版本:Version()是否为对立文件:Standalone()编码方式:Encoding()endl;coutendl;注释类这个类一般为xml数据提供解释说明,在程序中一般不使用它,因此,这里就不介绍了。元素类元素为一个容器类,它具有元素名称,并可以包含其它元素,文本,注释和未知节点,这些对象统称为元素的节点,即节点可以为元素、文本、注释和未知节点类型。元素也可以包含任意个数的属性。我们还是以如下的XML代码来说明这个类的功能。Thisatext(这是一个文本)节点名在上方元素的代码中,element为根元素的名称,你可以通过如下的函数来设置和返回它。+conststd:string&ValueStr()const+voidSetValue(conststd:string&_value)父节点subelement1,subelement2,subelement3,subelement4都是element的子元素,如果当前元素对象的指针指向subelement1,subelement2,subelement3,subelement4,你可以通过Parent()函数来返回指向element对象的指针,Parent()函数的声明如下:+TiXmlNode*Parent()子节点通过父节点的指针,你可以遍历所有的子节点。+TiXmlNode*FirstChild()+TiXmlNode*FirstChild(conststd:string&_value)上面两个函数用于返回第一个子节点对象的指针,带参数名的那个函数表示返回第一个名为_value的子节点。+TiXmlNode*LastChild()+TiXmlNode*LastChild(conststd:string&_value)上面的两个函数用于返回最后一个节点对象的指针,带参数名的那个函数表示返回最后一个名为_value的子节点。你也可以使用IterateChildren()函数来依次遍历所有的节点,它们的函数声明如下:+TiXmlNode*IterateChildren(constTiXmlNode*previous)+TiXmlNode*IterateChildren(conststd:string&_value,constTiXmlNode*previous)带参数名的那个函数表示只遍历同名的节点。编辑子节点你可以插入、删除替换所有的子节点。+TiXmlNode*InsertEndChild(constTiXmlNode&addThis);+TiXmlNode*InsertBeforeChild(TiXmlNode*beforeThis,constTiXmlNode&addThis);+TiXmlNode*InsertAfterChild(TiXmlNode*afterThis,constTiXmlNode&addThis);上面三个函数用于插入节点,InsertEndChild函数让你把新节点插入到末尾,InsertBeforeChild和InsertAfterChild函数允许你在指定的节点位置前后插入节点。+TiXmlNode*ReplaceChild(TiXmlNode*replaceThis,constTiXmlNode&withThis);ReplaceChild函数用于替换指定的节点。+boolRemoveChild(TiXmlNode*removeThis);RemoveChild函数让你删除指定的节点。voidClear();Clear函数会删除本节点的所有子节点(包括子节点包含的从子节点),但不会修改本节点。同级节点Thisatext(这是一个文本)在上面的xml代码中,subelement1、subelement2、subelement3、subelement4都属于同级节点,我们也提供了相关的函数用于在这些同级节点中遍历。+TiXmlNode*PreviousSibling()+TiXmlNode*PreviousSibling(conststd:string&_value)可以根据当前的节点,返回上一个节点的指针。带参数名的那个函数表示返回上一个名为_value的节点。当然你也可以根据当前的节点,返回下一个节点的指针。带参数名的那个函数表示返回下一个名为_value的节点。+TiXmlNode*NextSibling()+TiXmlNode*NextSibling(conststd:string&_value)遍历元素元素是一种特殊的节点,以为开始字符,后接元素名称。函数NextSiblingElement用于返回下一个同级元素,而忽略其它类型的节点。它们的函数声明如下:+TiXmlElement*NextSiblingElement()+TiXmlElement*NextSiblingElement(conststd:string&_value)带参数名的那个函数表示返回下一个名为_value的同级元素。本类也提供了相关的函数,让你返回第一个子元素。+TiXmlElement*FirstChildElement()+TiXmlElement*FirstChildElement(conststd:string&_value)带参数名的那个函数表示返回下一个名为_value的子元素。元素属性属性一般保存在元素中,它们为使用“=”号连接的两个字符串,左边的表示属性名,等号右边的表示属性值,通常使用字符串、整数和浮点数等数据类型表示。例如,pi=3.14。你可以通过如下的函数,返回属性值。+conststd:string*Attribute(conststd:string&name)const;+conststd:string*Attribute(conststd:string&name,int*i)const;+conststd:string*Attribute(conststd:string&name,double*d)const;在上面3个函数中,第一个函数使用字符串保存返回的属性值,第二个函数把属性值转换为整数然后返回,第三个函数把属性值转换为浮点数然后返回。不过,第二、三个函数都会以字符串的形式记录属性值,并作为函数的返回值返回。另外,你也可以使用模板函数:+templateintQueryValueAttribute(conststd:string&name,T*outValue)const来返回特点的属性值,它会根据你传入的参数,自动选择合适数据类型。另外,本类也提供了如下三个函数让你设置属性,参数的类型和返回函数类似。+voidSetAttribute(conststd:string&name,conststd:string&_value);+voidSetAttribute(conststd:string&name,int_value);+voidSetDoubleAttribute(constchar*name,doublevalue);FirstAttribute和LastAttribute可以让你返回第一个和最后一个属性,它们的函数声明如下:+TiXmlAttribute*FirstAttribute()+TiXmlAttribute*LastAttribute()RemoveAttribute函数可以让你删除指定名称的属性,它的函数声明如下:+voidRemoveAttribute(conststd:string&name)元素函数总结ValueStr/返回元素名称SetValue/设置元素名称Parent/返回父节点对象FirstChild/返回第一个子节点LastChild/返回最后一个子节点IterateChildren/返回下一个子节点InsertEndChild/在最后一个子节点后插入子节点InsertBeforeChild/在指定的子节点前插入子节点InsertAfterChild/在指定的子节点后插入子节点Replac

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论