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的内容              //这里没有属性,所以打印不出来

 

posted @ 2020-08-24 10:07  yunshangyue  阅读(348)  评论(0编辑  收藏  举报