TinyXML解析模块使用方法
来源:互联网 发布:php post接收 编辑:程序博客网 时间:2024/05/17 22:54
目录
一、文档简介: 4
二、 TinyXML解析及使用 4
1.解析XML 5
2.构建XML 7
一、文档简介:
本文档用于辅助使用者使用TinyXML解析模块进行开发工作。
TinyXML是一个开源的解析XML的解析库,主要作用是解析一个XML文档并由此生成一个可读可修改可保存的文档对象模型(DOM)。 XML的意思是“可扩展标记语言“(eXtensible Markup Language)。它允许你创建你自己的文档标记。TinyXML使用文档对象模型(DOM),DOM模型即文档对象模型,是将整个文档分成多个元素(如书、章、节、段等),并利用树型结构表示这些元素之间的顺序关系以及嵌套包含关系。这意味着XML数据被解析成一个可被浏览和操作的C++对象,然后它可以被写到磁盘或者另一个输出流中。你也可以把C++对象构造成一个XML文档然后把它写到磁盘或者另一个输出流中。
该解析库可以在http://sourceforge.net/projects/tinyxml/files/下载。
开发环境参数:
操作系统:Ubuntu 11.04
本机平台:X86
目标平台:Loongson 1B 开发板
交叉编译工具链:gcc-3.4.6-2f(1B交叉编译工具链)
所需软件及工具包:
TinyXML解析模块源码包:tinyxml.tgz
二、TinyXML解析及使用
TinyXML是个XML解析库,主要由DOM模型类(TiXmlBase、TiXmlNode、TiXmlAttribute、TiXmlComment、TiXmlDeclaration、TiXmlElement、TiXmlText、TiXmlUnknown)和操作类(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.h、tinystr.h、tinystr.cpp、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp)导入工程就可以使用了。
一般情况下,我们需要对XML的操作主要有以下几种情况的需求:
1.解析XML内容
2.构建XML内容
3.节点数据查询
4.节点数据删除
5.节点数据修改
6.其他
下边将主要讲述如何使用这些类及其函数接口来解析及构建XML:
1.解析XML
由首先准备一个XML片段,如下文件所示:
File:in_test.xml
<Persons>
<Person ID="1">
<name>小明</name>
<age>20</age>
</Person>
<Person ID="2">
<name>小红</name>
<age>30</age>
</Person>
</Persons>
然后我们编写一段读取节点内容及属性的测试程序如下:
Function:bool AnalysXML(const char *xml_file) //读取第一个节点的属性及内容
bool AnalysXML(const char *xml_file)
{
//创建一个XML的文档对象。
TiXmlDocument *document = new TiXmlDocument(xml_file); //"传入XML文件名"
if (NULL == document)
{
return false;
}
document->LoadFile();
//获得根元素。
TiXmlElement *root_element = document->RootElement();
if (NULL == root_element)
{
return false;
}
//获得第一个Person节点。
TiXmlElement *first_element = root_element->FirstChildElement();
if (NULL == first_element)
{
return false;
}
//获得第一个Person的name节点和age节点和ID属性。
TiXmlElement *name_element = first_element->FirstChildElement();
if (NULL == name_element)
{
return false;
}
TiXmlElement *age_element = name_element->NextSiblingElement();
if (NULL == age_element)
{
return false;
}
TiXmlAttribute *id_attribute = first_element->FirstAttribute();
if (NULL == id_attribute)
{
return false;
}
//输出XML内容到控制台
cout << "Analys XML:" << endl;
document->Print(stdout);
//输出根元素名称,即输出Persons。
cout << "The first element: " << root_element->Value() << endl;
//输出第一个Person的name内容,age内容,ID属性。
cout << "The first child element: " << name_element->FirstChild()->Value() << endl;
cout << "The second child element: " << age_element->FirstChild()->Value() << endl;
cout << "The first child element's attribute: " << id_attribute->Value() << endl;
return true;
}
编译后执行可以看到控制台有如下输出:
# ./xml_test
Analys XML:
<Persons>
<Person ID="1">
<name>小明</name>
<age>20</age>
</Person>
<Person ID="2">
<name>小红</name>
<age>30</age>
</Person>
</Persons>
The first element: Persons
The first child element: 小明
The second child element: 20
The first child element's attribute: 1
2.构建XML
下边是构建XML的例子,
Function:bool CreateXML(const char *xml_file) //构建XML内容并保存到文件
bool CreateXML(const char *xml_file)
{
// 定义一个TiXmlDocument类指针
TiXmlDocument *document = new TiXmlDocument;
if (NULL == document)
{
return false;
}
// 定义一个xml文件头部声明
TiXmlDeclaration *declaration = new TiXmlDeclaration(("1.0"),(""),(""));
if (NULL == declaration)
{
return false;
}
document->LinkEndChild(declaration);
// 生成一个根节点:MyApp
TiXmlElement *first_element = new TiXmlElement(("MyApp"));
if (NULL == first_element)
{
return false;
}
document->LinkEndChild(first_element);
// 生成子节点:Messages
TiXmlElement *child_element_messages = new TiXmlElement(("Messages"));
if (NULL == child_element_messages)
{
return false;
}
first_element->LinkEndChild(child_element_messages);
// 生成子节点:Welcome
TiXmlElement *child_element_welcome = new TiXmlElement(("Welcome"));
if (NULL == child_element_welcome)
{
return false;
}
child_element_messages->LinkEndChild(child_element_welcome);
// 设置Welcome节点的值
const char* str_value = ("Welcome to MyApp");
TiXmlText *welcome_value = new TiXmlText(str_value);
child_element_welcome->LinkEndChild(welcome_value);
// 生成子节点:Farewell
TiXmlElement *child_element_farewell = new TiXmlElement(("Farewell"));
if (NULL == child_element_farewell)
{
return false;
}
child_element_messages->LinkEndChild(child_element_farewell);
// 设置Farewell节点的值
str_value = ("Thank you for using MyApp");
TiXmlText *farewell_value = new TiXmlText(str_value);
child_element_farewell->LinkEndChild(farewell_value);
// 生成子节点:Windows
TiXmlElement *child_element_windows = new TiXmlElement(("Windows"));
if (NULL == child_element_windows)
{
return false;
}
first_element->LinkEndChild(child_element_windows);
// 生成子节点:Window
TiXmlElement *child_element_window = new TiXmlElement(("Window"));
if (NULL == child_element_window)
{
return false;
}
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 = new TiXmlElement(("Connection"));
if (NULL == child_element_connection)
{
return false;
}
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 << "Creat XML:" << endl;
document->Print(stdout);
return true;
}
编译后执行可以看到控制台有如下输出:
# ./xml_test
Creat XML:
<?xml version="1.0" ?>
<MyApp>
<Messages>
<Welcome>Welcome to MyApp</Welcome>
<Farewell>Thank you for using MyApp</Farewell>
</Messages>
<Windows>
<Window name="MainFrame" x="5" y="15" w="400" h="250" />
</Windows>
<Connection ip="192.168.0.1" timeout="123.456000" />
</MyApp>
并且在目录下生成一个XML文件如下:
File:out_test.xml
<?xml version="1.0" ?>
<MyApp>
<Messages>
<Welcome>Welcome to MyApp</Welcome>
<Farewell>Thank you for using MyApp</Farewell>
</Messages>
<Windows>
<Window name="MainFrame" x="5" y="15" w="400" h="250" />
</Windows>
<Connection ip="192.168.0.1" timeout="123.456000" />
</MyApp>
- TinyXML解析模块使用方法
- TinyXML使用方法
- TinyXml使用方法
- TinyXml使用方法
- Android中XML解析模块的使用方法
- 【类库解析】一个轻量级C++ xml解释器 TinyXML的使用方法
- TinyXML 解析中文XML
- TinyXML解析xml文档
- 使用TinyXML解析XML
- Tinyxml之递归解析
- tinyxml解析配置文件
- TinyXML解析XML
- TinyXML解析word图片
- TinyXml 解析 XML
- C++ TinyXML 解析器
- TinyXML解析xml文档
- TinyXML学习笔记:解析
- xml解析器tinyXML
- Android应用程序获得root权限 && 基于NVidia平台Android应用修改cpu频率
- apk逆向工程的工具
- R语言学习系列(来点实际的分析样例)
- test hello world
- 字符串与指针
- TinyXML解析模块使用方法
- 为多种屏幕尺寸编写移动Flash内容
- 主题:Java 枚举7常见种用法
- framework的调试与编译方法
- 80个Python经典资料(教程+源码+工具)汇总——下载目录
- ActiveX调用组件时,使用静默执行的方式,不弹出控制台窗口
- c# asp.net winform 隐藏文件夹 文件
- win7远程登录ubuntu11.10
- T-SQL问题解决集锦——数据加解密(2)