xml文件读取
下载tinyxml 库,下载路径:https://sourceforge.net/projects/tinyxml/
XML文件结构讲解
<?xml version="1.0"?> //声明 <rootnode> //根节点 childnode1是节点的名字 opencv-matrix:这个是节点的属性 <childnode1 type_id="opencv-matrix"> //子节点1 <rows>3</rows> //孙节点11 <cols>3</cols> //孙节点12 <dt>d</dt> //孙节点13 <data> //孙节点14 data是节点的名字,这个没有属性,但是有内容,childnode1就没有内容 1 2 3 4 5 6 7 8 9 1 2 3 </data></childnode1> <childnode2 type_id="opencv-matrix"> //子节点2 <rows>4</rows> //孙节点21 <cols>4</cols> //孙节点22 <dt>d</dt> //孙节点23 <data> //孙节点24 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 </data></childnode2> <childnode3 type_id="opencv-matrix"> //子节点3 <rows>3</rows> //孙节点31 <cols>1</cols> //孙节点32 <dt>d</dt> //孙节点33 <data> //孙节点34 1 2 3 </data></childnode3> </rootnode>
tinyxml下载
将.h以及.cpp文件放进工程内
代码
#include "tinyxml.h" #include "tinystr.h" TiXmlDocument doc; bool ret; //判断文件是否存在 ret = doc.LoadFile("\\1.xml"); if (!ret){ cerr << doc.ErrorDesc() << endl; exit(1); } //tinyxml 的打印器, 打印整体的xml文件 TiXmlPrinter printer; doc.Accept(&printer); //cout << printer.CStr() << endl; //读取root节点, 第一层节点 //表示找第一个名字是opencv的节点,如果为空就表示找第一个节点 //可以和pChild = pChild->NextSibling() 这个语句搭配使用,一直找下一个节点 TiXmlElement* root = doc.FirstChildElement("root"); if (root == NULL){ cerr << " no root" << endl; doc.Clear(); exit(1); } cout << "root node value: " << root->Value() << endl; //读取个child节点, 第二层节点 TiXmlElement* childnode1 = root->FirstChildElement("childnode1"); if (childnode1 == NULL){ cerr << " No chldnode1 element." << endl; doc.Clear(); exit(1); } cout << childnode1->Value() << endl; TiXmlAttribute *childnode1attri = childnode1->FirstAttribute(); cout <<"childnode1attri name : " << chldnode1attri->Value() << endl; // 这里没有内容,所以GetText() 也没有结果 //读取data,第三层节点 TiXmlElement* childnode1Data = childnode1->FirstChildElement("data"); if (childnode1 == NULL){ cerr << " No data element." << endl; doc.Clear(); exit(1); } cout << childnode1data->Value() << endl; //输出data字符 cout <<childnode1data->GetText() << endl; //输出data的内容 //这里没有属性,所以打印不出来