1.TinyXML
1.1.简介
TinyXML2.0是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件,然后在内存中生成DOM(Document Object Model)模型,从而让我们很方便的遍历这棵XML树。
下载网址
1.2.Qt+TinyXML环境搭建
下载完成后,解压找到tinyxml2.cpp 以及tinyxml2.h,并且添加到c++工程目录当中,与其他源码一起编译即可。
#include <iostream>
#include "tinyxml2.h"
using namespace tinyxml2;
using namespace std;
int main()
{
XMLDocument doc;
doc.LoadFile("baidu.xml");
doc.Print();
cout<<"doc status "<<doc.ErrorName()<<endl;
return 0;
}
1.3.读写XML
1.3.1.写
#include <iostream>
#include <string.h>
#include "tinyxml2.h"
using namespace tinyxml2;
using namespace std;
#if 0
<?xml version="1.0" encoding="utf-8"?>
<<!-- This is a XML comment --> >
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
</bookstore>
;
#endif
int main()
{
XMLDocument *pDoc=new XMLDocument; //定义一个文档的指针
XMLDeclaration *pDel = pDoc->NewDeclaration("xml version=\"1.0\" encoding=\"UTF-8\"");
pDoc->LinkEndChild(pDel);
XMLComment *pCom = pDoc->NewComment("This is a XML comment");
pDoc->LinkEndChild(pCom);
XMLElement *pEleRootBookStore = pDoc->NewElement("bookstore");
XMLElement *pEleBookOfBookStore = pDoc->NewElement("book");
pEleBookOfBookStore->SetAttribute("category","COOKING");
XMLElement *pEleTitleOfBook = pDoc->NewElement("title");
pEleTitleOfBook->SetAttribute("lang","en");
pEleTitleOfBook->SetText("Everyday Italian");
pEleBookOfBookStore->LinkEndChild(pEleTitleOfBook);
XMLElement *pEleAuthorOfBook = pDoc->NewElement("author");
pEleAuthorOfBook->SetText("Giada De Laurentiis");
pEleBookOfBookStore->LinkEndChild(pEleAuthorOfBook);
XMLElement *pEleYearOfBook = pDoc->NewElement("year");
pEleYearOfBook->SetText(2005);
pEleBookOfBookStore->LinkEndChild(pEleYearOfBook);
XMLElement *pElePriceOfBook = pDoc->NewElement("price");
pElePriceOfBook->SetText(30.00);
pElePriceOfBook->LinkEndChild(pElePriceOfBook);
pEleRootBookStore->LinkEndChild(pEleBookOfBookStore);
pDoc->LinkEndChild(pEleRootBookStore);
pDoc->Print();
pDoc->SaveFile("bookStore.xml");
free(pDoc);
return 0;
}
1.3.2.读
#include <iostream>
#include <string.h>
#include "tinyxml2.h"
using namespace tinyxml2;
using namespace std;
#if 0
<?xml version="1.0" encoding="utf-8"?>
<<!-- This is a XML comment --> >
<bookstore>
<book category = "COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
</bookstore>
;
#endif
int main()
{
XMLDocument *pDoc = new XMLDocument;
pDoc->LoadFile("bookStore.xml");
XMLElement *pRoot = pDoc->RootElement();
cout<<"rootEleName :"<<pRoot->Name()<<endl;
XMLElement *pEle = pRoot->FirstChildElement();
cout<<"FirstChildName:"<<pEle->Name()<<endl;
const XMLAttribute *pEleAttr = pEle->FirstAttribute();
cout<<"FirstChildAttrName:"<<pEleAttr->Name()<<" AttrValue:"<<pEleAttr->Value()<<endl;
pEle->SetAttribute("category","STUDY");
pEle = pEle->FirstChildElement();
cout<<" Name:"<<pEle->Name()
<<" AttrName:"<<pEle->FirstAttribute()->Name()
<<" AttrValue:"<<pEle->FirstAttribute()->Value()
<<" Text:"<<pEle->GetText()<<endl;
pEle = pEle->NextSiblingElement();
cout<<" Name:"<<pEle->Name()
<<" Text:"<<pEle->GetText()<<endl;
pEle = pEle->NextSiblingElement();
cout<<" Name:"<<pEle->Name()
<<" Text:"<<pEle->GetText()<<endl;
XMLElement *ele = pDoc->NewElement("Water");
ele->SetAttribute("aa","bb");
ele->SetText("good Water");
pEle = pDoc->FirstChildElement();
pEle->InsertEndChild(ele);
pDoc->Print();
return 0;
}