tinyxml 读取文本节点_c++中用TINYXML解析XML文件
TinyXML介绍
最近做一个负载均衡的小项目,需要解析xml配置文件,用到了TinyXML,感觉使用起来很容易,给出一个使用TinyXML进行XML解析的简单例子,很多复杂的应用都可以基于本例子的方法来完成。
TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。
DOM模型即文档对象模型,是将整个文档分成多个元素(如书、章、节、段等),并利用树型结构表示这些元素之间的顺序关系以及嵌套包含关系。
TinyXML类说明
在TinyXML中,根据XML的各种元素来定义了一些类:
TiXmlBase:整个TinyXML模型的基类。
TiXmlAttribute:对应于XML中的元素的属性。
TiXmlNode:对应于DOM结构中的节点。
TiXmlComment:对应于XML中的注释。
TiXmlDeclaration:对应于XML中的申明部分,即。
TiXmlDocument:对应于XML的整个文档。
TiXmlElement:对应于XML的元素。
TiXmlText:对应于XML的文字部分。
TiXmlUnknown:对应于XML的未知部分。
TiXmlHandler:定义了针对XML的一些操作。
下载和编译
工作目录为:
tinyxml/ //工作目录
|-- include //头文件根目录
| |-- tinyxml //tinyxml头文件,包括tinystr.h tinyxml.h
|-- src //cpp源码文件根目录
|-- tinyxml //tinyxml源码文件夹,包括tinystr.cpp tinyxml.cpp tinyxmlerror.cpp tinyxmlparser.cpp
|-- main.cpp //我们的主函数,调用tinyxml的示例代码
|-- conf //我们示例中用的xml文件所在的文件夹
|-- makefile //makefile,不用我们多说了吧,不懂请看我博客的makefile最佳实践
简单的例子
在conf目录下建立student.xml代码
tinyxml@163.com
中国jsoncpp@gmail.com
美国想要使用tinyxml,只需要在头文件中包含即可
读取整个xml文件并打印代码:
void printSchoolXml() {
using namespace std;
TiXmlDocument doc;
const char * xmlFile = "conf/school.xml";
if (doc.LoadFile(xmlFile)) {
doc.Print();
} else {
cout << "can not parse xml conf/school.xml" << endl;
}
}
读取XML
void readSchoolXml() {
using namespace std;
const char * xmlFile = "conf/school.xml";
TiXmlDocument doc;
if (doc.LoadFile(xmlFile)) {
doc.Print();
} else {
cout << "can not parse xml conf/school.xml" << endl;
return;
}
TiXmlElement* rootElement = doc.RootElement(); //School元素
TiXmlElement* classElement = rootElement->FirstChildElement(); // Class元素
TiXmlElement* studentElement = classElement->FirstChildElement(); //Students
for (; studentElement != NULL; studentElement = studentElement->NextSiblingElement() ) {
TiXmlAttribute* attributeOfStudent = studentElement->FirstAttribute(); //获得student的name属性
for (;attributeOfStudent != NULL; attributeOfStudent = attributeOfStudent->Next() ) {
cout << attributeOfStudent->Name() << " : " << attributeOfStudent->Value() << std::endl;
}
TiXmlElement* studentContactElement = studentElement->FirstChildElement();//获得student的第一个联系方式
for (; studentContactElement != NULL; studentContactElement = studentContactElement->NextSiblingElement() ) {
string contactType = studentContactElement->Value();
string contactValue = studentContactElement->GetText();
cout << contactType << " : " << contactValue << std::endl;
}
}
}
写入xml
void writeSchoolXml() {
using namespace std;
const char * xmlFile = "conf/school-write.xml";
TiXmlDocument doc;
TiXmlDeclaration * decl = new TiXmlDeclaration("1.0", "", "");
TiXmlElement * schoolElement = new TiXmlElement( "School" );
TiXmlElement * classElement = new TiXmlElement( "Class" );
classElement->SetAttribute("name", "C++");
TiXmlElement * stu1Element = new TiXmlElement("Student");
stu1Element->SetAttribute("name", "tinyxml");
stu1Element->SetAttribute("number", "123");
TiXmlElement * stu1EmailElement = new TiXmlElement("email");
stu1EmailElement->LinkEndChild(new TiXmlText("tinyxml@163.com") );
TiXmlElement * stu1AddressElement = new TiXmlElement("address");
stu1AddressElement->LinkEndChild(new TiXmlText("中国"));
stu1Element->LinkEndChild(stu1EmailElement);
stu1Element->LinkEndChild(stu1AddressElement);
TiXmlElement * stu2Element = new TiXmlElement("Student");
stu2Element->SetAttribute("name", "jsoncpp");
stu2Element->SetAttribute("number", "456");
TiXmlElement * stu2EmailElement = new TiXmlElement("email");
stu2EmailElement->LinkEndChild(new TiXmlText("jsoncpp@163.com"));
TiXmlElement * stu2AddressElement = new TiXmlElement("address");
stu2AddressElement->LinkEndChild(new TiXmlText("美国"));
stu2Element->LinkEndChild(stu2EmailElement);
stu2Element->LinkEndChild(stu2AddressElement);
classElement->LinkEndChild(stu1Element);
classElement->LinkEndChild(stu2Element);
schoolElement->LinkEndChild(classElement);
doc.LinkEndChild(decl);
doc.LinkEndChild(schoolElement);
doc.SaveFile(xmlFile);
}
XML删除操作
删除某个节点, TiXmlNode是TiXmlElement、TiXmlComment、TiXmlText、TiXmlDeclaration、TiXmlUnknown、
TiXmlDocument的基类
TiXmlNode node;
node.Clear();
从A节点上移除子节点B
TiXmlNode nodeA;
nodeA. RemoveChild( TiXmlNode* removeThis );
从元素A上移除名字为B的属性
TiXmlAttribute attrA;
attrA. RemoveAttribute( const char * name );
XML修改操作
查找内容为现需要将1234改成其他值
TiXmlNode* lpnode = NULL;
lpnode = tixml.RootElement()->IterateChildren("mfid",lpnode);
TiXmlAttribute* tiattr = lpnode->ToElement()->FirstAttribute();
//找到mfid节点,获取第一个属性值。注意,如果有多个属性值,需要判断哪个属性值是需要的
tiattr->SetValue(mfid.c_str());
替换一个节点
TiXmlNode* ReplaceChild( TiXmlNode* replaceThis, const TiXmlNode& withThis );
以上就是c++中用TINYXML解析XML文件的详细内容,更多关于c++ tinyxml解析XML的资料请关注脚本之家其它相关文章!
tinyxml 读取文本节点_c++中用TINYXML解析XML文件相关推荐
- tinyxml 读取文本节点_TinyXml 读写XML文件
使用Tinyxml创建和读取XML文件的优点:1,可在Windows和Linux中使用:2,方便易学,易用,可在http://sourceforge.net/projects/tinyxml/获取源代 ...
- tinyxml 读取文本节点_在Windows下使用TinyXML-2读取UTF-8编码包含中文字符的XML文件...
TinyXML-2 是一个用 C++ 开发的小巧.高效的 XML 解析工具,它在 GitHub 网站上的链接为: https://github.com/leethomason/tinyxml2 .它的 ...
- tinyxml 读取文本节点_TinyXML读取xml文件
TinyXML读取xml文件 2020-05-19 编程之家收集整理的这篇文章主要介绍了TinyXML读取xml文件,编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考. 例子 xml 内容: ...
- tinyxml 读取文本节点_【C++】【TinyXml】xml文件的读写功能使用——写xml文件
TinyXml工具是常用比较简单的C++中xml读写的工具 需要加载 #include "TinyXml\tinyxml.h" 在TinyXML中,根据XML的各种元素来定义了一些 ...
- wxml报错原因_C#生成、解析xml文件以及处理报错原因
转载自:http://blog.csdn.net/lilinoscar/article/details/21027319 简单的介绍一下生成XML文件以及解析,因为有些数据不一定放到数据库,减少链接数 ...
- tinyxml 读取文本节点_用TinyXml2读取XML文件的一个简单Demo
废话少说直接上代码,需要的人自然一看便懂,对于第一次接触TinyXml2的人来说还是有帮助的. 18 1.7 28 1.6 30 1.8 tinyxml2::XMLDocument Doc; Doc. ...
- python解析xml文件elementtree_在python中使用ElementTree解析xml文件
ElementTree是python自带的处理xml格式文件的模块,位于libxmletreeElementTree.py.这个模块有两个基本概念:Element和ElementTree. 表示整个树 ...
- C++ 使用 TinyXml 解析 XML 文件
知乎 C++解析xml有什么好用的轮子? :https://www.zhihu.com/question/32046606 TinyXML-2 的 github地址和帮助文档:https://git ...
- python读取xml_python解析xml文件
加载和读取xml文件 import xml.dom.minidom doc = xml.dom.minidom.parse(xmlfile) 获取xml文档对象(对子节点和节点node都适用) roo ...
最新文章
- LeetCode - 34. Search for a Range
- 用 TensorFlow 目标检测 API 发现皮卡丘!
- WinForm应用只运行一次
- Linux文件句柄限制总结
- 微软project服务器搭建,Project Professional 版本(Project Server 2010 设置)
- Vmware 安装虚拟工具 (二)
- 人工智能和计算机软件,人工智能在计算机软件方面有什么应用?
- 四川长虹招聘机器视觉、图像识别工程师
- 前端工程化和模块化学习资料汇总
- PHP ECSHOP中 诡异的问题:expects parameter 1 to be double
- OpenCV(iOS)平滑处理(模糊,毛玻璃)(10)
- 代码行数统计工具loc与iloc
- Linux设备驱动入门
- Excel自动批量发邮件
- matlab gpu加速,Matlab之GPU加速方法
- python表示倍数_python代表倍数
- 如何使用万用表测量二极管的阻值
- 怎么AI生成绘画图片?试试这几款软件吧
- 中国计算机软件法,计算机软件专利申请中国快律法务攻略.pdf
- 蓝桥杯JAVA-4.常用数据类型