安装
tinyxml2下载链接说明
关键类- XMLDocument:XML文档
- XMLElement:XML标签对(标签对之中还能嵌套许多elements,最大的一个Element就是xml文档的根节点,必须唯一)
- XMLDeclaration:每个XML文档开头必备的
<? xxxxxx ?>
- XMLComment:作为注释出现在任何地方,它被
<!-- 与 -->
包围
示例一:
- XML文件如下
<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
<ID1 ID1-1="123" ID1-2="234" ID1-3="345">456</ID1>
<ID2>456</ID2>
</CONFIG>
- 读写XML文件
#include <iostream>
#include "tinyxml2.h"
void WriteXMLFile()
{
tinyxml2::XMLDocument doc;
//const char* declaration ="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>";
//doc.Parse(declaration);//会覆盖xml所有内容
//声明(效果同上)
tinyxml2::XMLDeclaration* declaration=doc.NewDeclaration();
doc.InsertFirstChild(declaration);
tinyxml2::XMLElement* root=doc.NewElement("CONFIG");
tinyxml2::XMLElement* ID1 = doc.NewElement("ID1");
ID1->SetAttribute("ID1-1",123);
ID1->SetAttribute("ID1-2",234);
ID1->SetAttribute("ID1-3",345);
ID1->SetText(456);
root->InsertEndChild(ID1);
tinyxml2::XMLElement* ID2 = doc.NewElement("ID2");
ID2->SetText(456);
root->InsertEndChild(ID2);
doc.InsertEndChild(root);
doc.SaveFile("XMLFILE.xml");
}
void ReadXMLFile()
{
tinyxml2::XMLDocument docXml;
tinyxml2::XMLError errXml = docXml.LoadFile("XMLFILE.xml");
if(tinyxml2::XML_SUCCESS == errXml)
{
tinyxml2::XMLElement* elmtRoot = docXml.RootElement();
tinyxml2::XMLElement* ID1 = elmtRoot->FirstChildElement("ID1");
tinyxml2::XMLElement* ID2 = elmtRoot->FirstChildElement("ID2");
const tinyxml2::XMLAttribute *ID1_1 = ID1->FirstAttribute();
std::cout<< ID1_1->Name() << ":" << ID1_1->Value() << std::endl;
const tinyxml2::XMLAttribute *ID1_2 = ID1->FirstAttribute()->Next();
std::cout<< ID1_2->Name() << ":" << ID1_2->Value() << std::endl;
const tinyxml2::XMLAttribute *ID1_3 = ID1->FirstAttribute()->Next()->Next();
std::cout<< ID1_3->Name() << ":" << ID1_3->Value() << std::endl;
const char* pContent1 = ID1->GetText();
std::cout << "ID1: " << pContent1 << std::endl;
const char* pContent2 = ID2->GetText();
std::cout << "ID2: " << pContent2 << std::endl;
}
}
int main(int argc, char *argv[])
{
WriteXMLFile();
ReadXMLFile();
}
示例二:
<CameraPlatMovePara DetaHeight="0.05" DetaYaw="0.097" Speed="0.05"/>
//read xml file
XMLDocument CameraPlatMovePara;
CameraPlatMovePara.LoadFile("CameraPlatMovePara.xml");
if(CameraPlatMovePara.ErrorID() == XMLError::XML_SUCCESS)
{
XMLElement *PlatInfo = CameraPlatMovePara.FirstChildElement("CameraPlatMovePara");
m_nCameraPlatDetaHeight = atof(PlatInfo->Attribute("DetaHeight"));
m_nCameraPlatDetaYaw = atof(PlatInfo->Attribute("DetaYaw"));
m_nCameraPlatSpeed = atof(PlatInfo->Attribute("Speed"));
}
示例三:
<?xml version="1.0" encoding="UTF-8"?>
<RFID_CONFIG>
<parameter Name="nRSS" Value="2"/>
<parameter Name="nFilterTime" Value="5"/>
</RFID_CONFIG>
#include <iostream>
#include "tinyxml2.h"
#include "stdio.h"
int main(int argc,char* argv[])
{
tinyxml2::XMLDocument docXml;
tinyxml2::XMLError errXml = docXml.LoadFile("config.xml");
if(tinyxml2::XML_SUCCESS != errXml)
{
std::cout << "read config.xml error" << std::endl;
return -1;
}
tinyxml2::XMLElement* piXmlElemRoot = docXml.RootElement();
tinyxml2::XMLElement* piXmlElemParam=piXmlElemRoot->FirstChildElement("parameter");
uint16_t nSetFilterTime = 0;
uint8_t nSetRSS = 0;
if(NULL == piXmlElemParam)
{
std::cout << "read config.xml error" << std::endl;
return -1;
}
do
{
std::cout << piXmlElemParam->Value() << std::endl;
const tinyxml2::XMLAttribute* piParam = piXmlElemParam->FirstAttribute();
std::cout << piParam->Value() << std::endl;
if(0 == strcmp(piParam->Value(),"nRSS"))
{
nSetRSS = (uint8_t)(atoi(piParam->Next()->Value()));
printf("%d\n",nSetRSS);
}
if(0 == strcmp(piParam->Value(),"nFilterTime"))
{
nSetFilterTime = (uint16_t)(atoi(piParam->Next()->Value()));
printf("%d\n",nSetFilterTime);
}
piXmlElemParam = piXmlElemParam->NextSiblingElement("parameter");
}while(NULL!=piXmlElemParam);
return 0;
}
注意:qt配置.pro:LIBS += -L/../tinyxml2 -ltinyxml2
- 使用Qt库读取xml
void readXmlFile()
{
QFile file("config.xml");
QString error = "";
QDomDocument doc;
int row = 0, column = 0;
if (!file.open(QIODevice::ReadOnly))
{
qDebug() << "open config.xml err";
return;
}
if(!doc.setContent(&file,false,&error,&row,&column))
{
qDebug() << "config.xml set content failed";
file.close();
return;
}
file.close();
QDomElement root = doc.documentElement();
QDomNode node = root.firstChildElement("Parameters");
do
{
QDomElement element = node.toElement();
if(!element.isNull())
{
if(element.attributeNode("Name").value().toStdString() == "PressureNum")
{
qDebug() << element.attributeNode("Value").value();
}
if(element.attributeNode("Name").value().toStdString() == "Number")
{
qDebug() << element.attributeNode("Value").value();
}
}
node = node.nextSiblingElement("Parameters");
}while(!node.isNull());
}
注意:qt配置.pro:
QT += xml