开源项目tinyxml2快速上手教程
一、github链接
https://github.com/leethomason/tinyxml2
二、使用说明
1、tinyxml2是一个C++实现的xml解析库。
2、由tinyxml2.cpp tinyxml2.h这个两个文件实现,所有非常方便的编译成库或直接将源码嵌入到自己项目
三、编译
git clone https://github.com/leethomason/tinyxml2
cd tinyxml2 ; make
即可在tinyxml2目录下生成 libtinyxml2.a
四、使用示例
我是直接将源码tinyxml2.cpp tinyxml2.h 拿来使用
main.cpp
#include <iostream>
#include "tinyxml2.h"
using namespace std;
using namespace tinyxml2;
// 加载xml文件
static void test1()
{
XMLDocument doc;
doc.LoadFile("dream.xml");
XMLElement* titleElement = doc.FirstChildElement();
const char* text = titleElement->Name();
cout<<"text:"<<text<<endl;
cout<<endl;
//doc.Print();
if (0 == doc.ErrorID())
{
cout<<"load file success"<<endl;
}
else
{
cout<<"load file error"<<endl;
}
}
// 解析xml格式字符串
static void test2()
{
const char xml[] = {"<elment/>"};
XMLDocument doc;
doc.Parse(xml);
if (0 == doc.ErrorID())
{
cout<<"Parse xml success"<<endl;
}
else
{
cout<<"Parse xml error"<<endl;
}
}
// 获取xml元素值
static void test3()
{
const char xml[] = "<?xml version=\"1.0\"?>"
"<!DOCTYPE PLAY SYSTEM \"play.dtd\">"
"<PLAY>"
"<TITLE>I have a Dream</TITLE>"
"</PLAY>";
XMLDocument doc;
doc.Parse(xml);
XMLElement* titleElement = doc.FirstChildElement("PLAY")->FirstChildElement("TITLE");
const char* title = titleElement->GetText();
cout<<"1 title:"<<title<<endl;
XMLText* textNode = titleElement->FirstChild()->ToText();
title = textNode->Value();
cout<<"2 title:"<<title<<endl;
}
// 获取xml元素值转为整型
static void test4()
{
const char* xml =
"<information>"
" <attributeApproach v='2' />"
" <textApproach>"
" <v>2</v>"
" </textApproach>"
"</information>";
int v1 = 0;
int v2 = 0;
XMLDocument doc;
doc.Parse(xml);
XMLElement* aAe = doc.FirstChildElement()->FirstChildElement("attributeApproach");
aAe->QueryIntAttribute("v", &v1);
XMLElement* tAe = doc.FirstChildElement()->FirstChildElement("textApproach");
tAe->FirstChildElement("v")->QueryIntText(&v2);
cout<<"v1:"<<v1<<"\t"<<"v2:"<<v2<<endl;
}
// 增、删、查、改操作
static void test5()
{
XMLDocument doc;
/* 一、增 */
// 增加一个节点
XMLElement *Element = doc.NewElement("name");
//Element->SetText("tanhuifang");
doc.InsertEndChild(Element);
// 增加一个子节点
XMLElement* e1 = Element->InsertNewChildElement("age");
e1->SetText("100");
XMLElement* e2 = Element->InsertNewChildElement("gender");
e2->SetText("man");
/* 二、删 */
// 删除一个子节点
XMLNode * node = Element->FirstChildElement("age");
Element->DeleteChild(node);
/* 三、查 */
XMLElement* gender = doc.FirstChildElement()->FirstChildElement("gender");
cout<<"gender:"<<gender->GetText()<<endl;
/* 四、改 */
gender->SetText("female");
// 打印xml结构
doc.Print();
// 保存为xml文件
doc.SaveFile("test.xml");
}
int main()
{
test5();
return 0;
}
编译运行:
g++ main.cpp tinyxml2.cpp -o main
./main
欢迎转载请注明出处:海漩涡
http://blog.csdn.net/tanhuifang520