`
mmdev
  • 浏览: 12924990 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

TinyXML解析模块使用方法

 
阅读更多

目录

一、文档简介: 4

二、TinyXML解析及使用 4

1.解析XML 5

2.构建XML 7

一、文档简介:

本文档用于辅助使用者使用TinyXML解析模块进行开发工作。

TinyXML是一个开源的解析XML的解析库,主要作用是解析一个XML文档并由此生成一个可读可修改可保存的文档对象模型(DOM)。XML的意思是“可扩展标记语言“(eXtensibleMarkupLanguage)。它允许你创建你自己的文档标记。TinyXML使用文档对象模型(DOM),DOM模型即文档对象模型,是将整个文档分成多个元素(如书、章、节、段等),并利用树型结构表示这些元素之间的顺序关系以及嵌套包含关系。这意味着XML数据被解析成一个可被浏览和操作的C++对象,然后它可以被写到磁盘或者另一个输出流中。你也可以把C++对象构造成一个XML文档然后把它写到磁盘或者另一个输出流中。

该解析库可以在http://sourceforge.net/projects/tinyxml/files/下载。

开发环境参数:

操作系统:Ubuntu11.04

本机平台:X86

目标平台:Loongson1B开发板

交叉编译工具链:gcc-3.4.6-2f1B交叉编译工具链)

所需软件及工具包:

TinyXML解析模块源码包:tinyxml.tgz

二、TinyXML解析及使用

TinyXML是个XML解析库,主要由DOM模型类(TiXmlBaseTiXmlNodeTiXmlAttributeTiXmlCommentTiXmlDeclarationTiXmlElementTiXmlTextTiXmlUnknown)和操作类(TiXmlHandler)构成。解析库分别根据XML的各种元素来定义了一些类:

TiXmlBase:整个TinyXML模型的基类。

TiXmlAttribute:对应于XML中的元素的属性。

TiXmlNode:对应于DOM结构中的节点。

TiXmlComment:对应于XML中的注释。

TiXmlDeclaration:对应于XML中的申明部分,即<versiong="1.0"?>

TiXmlDocument:对应于XML的整个文档。

TiXmlElement:对应于XML的元素。

TiXmlText:对应于XML的文字部分。

TiXmlUnknown:对应于XML的未知部分。
TiXmlHandler:定义了针对XML的一些操作。

而整个TinyXML模块由两个头文件(.h文件)和四个CPP文件(.cpp文件)构成,使用的时候,只要将(tinyxml.htinystr.htinystr.cpptinyxml.cpptinyxmlerror.cpptinyxmlparser.cpp)导入工程就可以使用了。

一般情况下,我们需要对XML的操作主要有以下几种情况的需求:

1.解析XML内容

2.构建XML内容

3.节点数据查询

4.节点数据删除

5.节点数据修改

6.其他

下边将主要讲述如何使用这些类及其函数接口来解析及构建XML:

1.解析XML

由首先准备一个XML片段,如下文件所示:

Filein_test.xml

<Persons>

<PersonID="1">

<name>小明</name>

<age>20</age>

</Person>

<PersonID="2">

<name>小红</name>

<age>30</age>

</Person>

</Persons>

然后我们编写一段读取节点内容及属性的测试程序如下:

FunctionboolAnalysXML(constchar*xml_file)//读取第一个节点的属性及内容

boolAnalysXML(constchar*xml_file)

{

//创建一个XML的文档对象。

TiXmlDocument*document=newTiXmlDocument(xml_file);//"传入XML文件名"

if(NULL==document)

{

returnfalse;

}

document->LoadFile();

//获得根元素。

TiXmlElement*root_element=document->RootElement();

if(NULL==root_element)

{

returnfalse;

}

//获得第一个Person节点。

TiXmlElement*first_element=root_element->FirstChildElement();

if(NULL==first_element)

{

returnfalse;

}

//获得第一个Personname节点和age节点和ID属性。

TiXmlElement*name_element=first_element->FirstChildElement();

if(NULL==name_element)

{

returnfalse;

}

TiXmlElement*age_element=name_element->NextSiblingElement();

if(NULL==age_element)

{

returnfalse;

}

TiXmlAttribute*id_attribute=first_element->FirstAttribute();

if(NULL==id_attribute)

{

returnfalse;

}

//输出XML内容到控制台

cout<<"AnalysXML:"<<endl;

document->Print(stdout);

//输出根元素名称,即输出Persons

cout<<"Thefirstelement:"<<root_element->Value()<<endl;

//输出第一个Personname内容,age内容,ID属性。

cout<<"Thefirstchildelement:"<<name_element->FirstChild()->Value()<<endl;

cout<<"Thesecondchildelement:"<<age_element->FirstChild()->Value()<<endl;

cout<<"Thefirstchildelement'sattribute:"<<id_attribute->Value()<<endl;

returntrue;

}

编译后执行可以看到控制台有如下输出:

#./xml_test

AnalysXML:

<Persons>

<PersonID="1">

<name>小明</name>

<age>20</age>

</Person>

<PersonID="2">

<name>小红</name>

<age>30</age>

</Person>

</Persons>

Thefirstelement:Persons

Thefirstchildelement:小明

Thesecondchildelement:20

Thefirstchildelement'sattribute:1

2.构建XML

下边是构建XML的例子,

FunctionboolCreateXML(constchar*xml_file)//构建XML内容并保存到文件

boolCreateXML(constchar*xml_file)

{

//定义一个TiXmlDocument类指针

TiXmlDocument*document=newTiXmlDocument;

if(NULL==document)

{

returnfalse;

}

//定义一个xml文件头部声明

TiXmlDeclaration*declaration=newTiXmlDeclaration(("1.0"),(""),(""));

if(NULL==declaration)

{

returnfalse;

}

document->LinkEndChild(declaration);

//生成一个根节点:MyApp

TiXmlElement*first_element=newTiXmlElement(("MyApp"));

if(NULL==first_element)

{

returnfalse;

}

document->LinkEndChild(first_element);

//生成子节点:Messages

TiXmlElement*child_element_messages=newTiXmlElement(("Messages"));

if(NULL==child_element_messages)

{

returnfalse;

}

first_element->LinkEndChild(child_element_messages);

//生成子节点:Welcome

TiXmlElement*child_element_welcome=newTiXmlElement(("Welcome"));

if(NULL==child_element_welcome)

{

returnfalse;

}

child_element_messages->LinkEndChild(child_element_welcome);

//设置Welcome节点的值

constchar*str_value=("WelcometoMyApp");

TiXmlText*welcome_value=newTiXmlText(str_value);

child_element_welcome->LinkEndChild(welcome_value);

//生成子节点:Farewell

TiXmlElement*child_element_farewell=newTiXmlElement(("Farewell"));

if(NULL==child_element_farewell)

{

returnfalse;

}

child_element_messages->LinkEndChild(child_element_farewell);

//设置Farewell节点的值

str_value=("ThankyouforusingMyApp");

TiXmlText*farewell_value=newTiXmlText(str_value);

child_element_farewell->LinkEndChild(farewell_value);

//生成子节点:Windows

TiXmlElement*child_element_windows=newTiXmlElement(("Windows"));

if(NULL==child_element_windows)

{

returnfalse;

}

first_element->LinkEndChild(child_element_windows);

//生成子节点:Window

TiXmlElement*child_element_window=newTiXmlElement(("Window"));

if(NULL==child_element_window)

{

returnfalse;

}

child_element_windows->LinkEndChild(child_element_window);

//设置节点Window的值

child_element_window->SetAttribute(("name"),("MainFrame"));

child_element_window->SetAttribute(("x"),("5"));

child_element_window->SetAttribute(("y"),("15"));

child_element_window->SetAttribute(("w"),("400"));

child_element_window->SetAttribute(("h"),("250"));

//生成子节点:Connection

TiXmlElement*child_element_connection=newTiXmlElement(("Connection"));

if(NULL==child_element_connection)

{

returnfalse;

}

first_element->LinkEndChild(child_element_connection);

//设置节点Connection的值

child_element_connection->SetAttribute(("ip"),("192.168.0.1"));

child_element_connection->SetAttribute(("timeout"),("123.456000"));

//保存至文件

document->SaveFile(xml_file);

//输出到控制台

cout<<"CreatXML:"<<endl;

document->Print(stdout);

returntrue;

}

编译后执行可以看到控制台有如下输出:

#./xml_test

CreatXML:

<?xmlversion="1.0"?>

<MyApp>

<Messages>

<Welcome>WelcometoMyApp</Welcome>

<Farewell>ThankyouforusingMyApp</Farewell>

</Messages>

<Windows>

<Windowname="MainFrame"x="5"y="15"w="400"h="250"/>

</Windows>

<Connectionip="192.168.0.1"timeout="123.456000"/>

</MyApp>

并且在目录下生成一个XML文件如下:

Fileout_test.xml

<?xmlversion="1.0"?>

<MyApp>

<Messages>

<Welcome>WelcometoMyApp</Welcome>

<Farewell>ThankyouforusingMyApp</Farewell>

</Messages>

<Windows>

<Windowname="MainFrame"x="5"y="15"w="400"h="250"/>

</Windows>

<Connectionip="192.168.0.1"timeout="123.456000"/>

</MyApp>

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics