C++ 使用TinyXML解析XML文件
来源:互联网 发布:linux解压war包 编辑:程序博客网 时间:2024/06/06 00:40
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>
<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 }
3.生成XML文件
如生成文件b.xml如下所示:
<root>
<Element1 attribute1="some value" />
<Element2 attribute2="2" attribute3="3">
<Element3 attribute4="4" />
Some text.
</Element2>
</root>
<Element1 attribute1="some value" />
<Element2 attribute2="2" attribute3="3">
<Element3 attribute4="4" />
Some text.
</Element2>
</root>
生成上面b.xmlL文件代码如下:
1 #include "tinyxml.h" 2 #include <iostream> 3 #include <string> 4 using namespace std; 5 6 enum SuccessEnum {FAILURE, SUCCESS}; 7 8 SuccessEnum saveXML() 9 {10 TiXmlDocument doc;11 12 TiXmlElement* root = new TiXmlElement("root");13 doc.LinkEndChild(root);14 15 TiXmlElement* element1 = new TiXmlElement("Element1");16 root->LinkEndChild(element1);17 18 element1->SetAttribute("attribute1", "some value");19 20 21 TiXmlElement* element2 = new TiXmlElement("Element2"); ///元素22 root->LinkEndChild(element2);23 24 element2->SetAttribute("attribute2", "2");25 element2->SetAttribute("attribute3", "3");26 27 28 TiXmlElement* element3 = new TiXmlElement("Element3");29 element2->LinkEndChild(element3);30 31 element3->SetAttribute("attribute4", "4");32 33 TiXmlText* text = new TiXmlText("Some text."); ///文本34 element2->LinkEndChild(text);35 36 37 bool success = doc.SaveFile("b.xml");38 doc.Clear();39 40 if(success)41 return SUCCESS;42 else43 return FAILURE;44 }45 46 int main(int argc, char* argv[])47 {48 if(saveXML() == FAILURE)49 return 1;50 return 0;51 }
4.重要函数或类型的说明
(1)FirstChildElement(const char* value=0):获取第一个值为value的子节点,value默认值为空,则返回第一个子节点。
(2)NextSiblingElement( const char* _value=0 ) :获得下一个(兄弟)节点。
(3)LinkEndChild(XMLHandle *handle):添加一个子节点。元素或者文本
0 0
- 使用TinyXml 解析XML文件
- C++TinyXml读取解析xml文件
- [Cocos2d-x] 使用TinyXml 解析XML文件
- 使用tinyxml进行XML文件解析
- Cocos2d-x] 使用TinyXml 解析XML文件
- 浅谈如何使用tinyxml解析xml文件
- C++ 使用TinyXML解析XML文件
- 使用tinyxml创建及解析XML文件
- C++ 使用 TinyXml 解析 XML 文件
- Tinyxml解析xml文件
- tinyxml解析xml文件
- 使用TinyXML解析XML
- 使用TinyXML进行xml文件解析,生成xml文件
- TinyXML c++XML解析器
- XML解析模型(TinyXml使用)
- C++使用TinyXML解析XML
- xml解析(tinyXml使用)
- 使用tinyxml解析XML配置文件
- linux内核中的GPIO系统之(2):pin control subsystem
- 彻底解决Android 应用方法数不能超过65K的问题
- php中的输入流
- Android实战简易教程-第六十六枪(结合SharedPreferenced实现自动登录功能)
- ASP.NET MVC 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction差别
- C++ 使用TinyXML解析XML文件
- 欢迎使用CSDN-markdown编辑器
- Mysql JDBC Url参数说明
- Linux内核中的GPIO系统之(3):pin controller driver代码分析
- Web全栈工程师的自我修养 心得2
- java io 类继承图
- iOS应用国际化教程(2014版)
- unity3d 手机中Input类中touch详解_教程
- boost之Boost.Foreach遍历