1.介绍

  读取和设置xml配置文件是最常用的操作,TinyXML是一个开源的解析XML的C++解析库,能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。  

  下载TinyXML的网址:http://www.grinninglizard.com/tinyxml/

  使用TinyXML只需要将其中的6个文件拷贝到项目中就可以直接使用了,这六个文件是:tinyxml.h、tinystr.h、tinystr.cpp、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp。

 2.读取XML文件

 如读取文件a.xml:

<ToDo>
    <Item priority="1"> 
        <bold>
            Book store!
        </bold>
    </Item>
    <Item priority="2"> 
        book1
    </Item>
    <Item priority="2"> 
        book2
    </Item>
</ToDo>

读取代码如下:

 1 #include "tinyxml.h"
 2 #include <iostream>
 3 #include <string>
 4 
 5 using namespace std;
 6 
 7 enum SuccessEnum {FAILURE, SUCCESS};
 8 
 9 SuccessEnum loadXML()
10 {
11     TiXmlDocument doc;
12     if(!doc.LoadFile("a.xml"))
13     {
14         cerr << doc.ErrorDesc() << endl;
15         return FAILURE;
16     }
17 
18     TiXmlElement* root = doc.FirstChildElement();
19     if(root == NULL)
20     {
21         cerr << "Failed to load file: No root element." << endl;
22         doc.Clear();
23         return FAILURE;
24     }
25 
26     for(TiXmlElement* elem = root->FirstChildElement(); elem != NULL; elem = elem->NextSiblingElement())
27     {
28         string elemName = elem->Value();
29         const char* attr;
30         attr = elem->Attribute("priority");
31         if(strcmp(attr,"1")==0)
32         {
33             TiXmlElement* e1 = elem->FirstChildElement("bold");
34             TiXmlNode* e2=e1->FirstChild();
35             cout<<"priority=1\t"<<e2->ToText()->Value()<<endl;
36 
37         }
38         else if(strcmp(attr,"2")==0)
39         {
40             TiXmlNode* e1 = elem->FirstChild();
41             cout<<"priority=2\t"<<e1->ToText()->Value()<<endl;
42         }
43     }
44     doc.Clear();
45     return SUCCESS;
46 }
47 
48 int main(int argc, char* argv[])
49 {
50     if(loadXML() == FAILURE)
51         return 1;
52     return 0;
53 }
View Code

相关文章: