http://www.cppblog.com/xlshcn/archive/2007/11/21/cppxmlserializer.html
-
2019-10-01 01:01:36
转载于:https://www.cnblogs.com/xlshcn/p/6999851.html
更多相关内容 -
C++XML工具库(markup库).rar
2020-07-30 22:12:38markup 是C/C++编程过程中使用的一种轻量级的XML操作工具库。附件是Markup.h和Markup.cpp文件,导入到程序中即可直接使用的。 -
tinyxml 常用的C++ XML解析器非常优秀
2020-12-31 10:48:57读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好。 TinyXML是一个开源的解析XML的解析库,能够用于C++,... -
C++XML读写封装类
2016-01-25 10:49:07C++封装的XML读写类,可以参考使用。 -
C++XML文件解析库tinyxml
2018-10-20 19:15:44This tutorial has a few tips and suggestions on how to use TinyXML effectively. I've also tried to include some C++ tips like how to convert strings to integers and vice versa. This isn't anything to... -
C++ XML文件解析库 tinyxml2
2018-07-02 13:51:04TinyXML2是simple、small、efficient开源的C++ XML文件解析库,可以很方便的应用到现有的项目之中。非常适合存储简单数据,配置文件,对象序列化等数据量不是很大的操作。 -
c++ xml读取操作库
2018-01-30 13:59:17c++ xml读取操作库 ,工程项目源码,动态链接库与测试工程 -
C++ XmlDocument类
2012-12-06 14:41:11这是我自己写的一个用于C++语言中创建,读取,保存xml文件的一个类,大家可以作为参考,欢迎大家提出意见。 -
c++ xml解析工具——tinyxml
2013-04-25 11:44:43小巧实用的c++ xml解析工具类——tinyxml,非常好用 -
C++ xml库的选择
2021-11-18 11:07:56自从触及xml文件的读写,一直以来都是用的tinyxml2,接口简单,然而近期项目频繁出错,跟踪调试发现,问题出在了xml文件的读写上,当节点数超过百万级别的时候,内存暴增到G的当量,很显然程序会由于内存申请不足崩...自从触及xml文件的读写,一直以来都是用的tinyxml2,接口简单,然而近期项目频繁出错,跟踪调试发现,问题出在了xml文件的读写上,当节点数超过百万级别的时候,内存暴增到G的当量,很显然程序会由于内存申请不足崩掉了。果断寻找替代品,百度搜索找到了pugixml开源库,将原有的调用tinyxml2接口的近千行代码替换之后,运行程序,一切顺利,速度感觉还较之前的有所提示。
2者调用区别(被注释屏蔽掉的代码是tinyxml2接口调用部分):
// xml文件声明 // tinyxml2::XMLDocument docCalKml; pugi::xml_document docCalKml; // xml文件内容编码格式声明 //tinyxml2::XMLDeclaration *declare = docCalKml.NewDeclaration(_T("xml version=\"1.0\" encoding=\"UTF-8\"")); //docCalKml.InsertEndChild(declare); pugi::xml_node declare = docCalKml.prepend_child(pugi::node_declaration); declare.append_attribute("version").set_value("1.0"); declare.append_attribute("encoding").set_value("UTF-8"); // 节点值的写入 //XMLElement* eleSRSId = docCalXml.NewElement(_T("Id")); //eleSRSId->SetText(0); //eleSRS->InsertEndChild(eleSRSId); pugi::xml_node eleSRSId = eleSRS.append_child("Id"); eleSRSId.append_child(pugi::node_pcdata).set_value("0"); // 节点值的读取 //XMLElement* eleOpticalProperties = docOpt.RootElement();// ->FirstChildElement(_T("OpticalProperties")); //XMLElement* eleOpticalPropertiesId = eleOpticalProperties->FirstChildElement(_T("Id")); //int nOpticalPropertiesId = eleOpticalPropertiesId->IntText(); pugi::xml_node eleOpticalProperties = docOpt.root().first_child(); pugi::xml_node eleOpticalPropertiesId = eleOpticalProperties.child("Id"); int nOpticalPropertiesId = eleOpticalPropertiesId.text().as_int(); // 文件保存 //if (tinyxml2::XML_SUCCESS != docCalKml.SaveFile(strCalKmlFile)) if (!docCalKml.save_file(strCalKmlFile, PUGIXML_TEXT("\t"), pugi::format_default | pugi::format_no_declaration | pugi::format_no_escapes, pugi::encoding_utf8)) return FALSE; else return TRUE;
-
C++XML高级编程指南扫描版
2013-12-06 17:41:15本书为成功构建C++XML程序提供了有效、高水平和正中要点的技巧和工具。本书由5部分构成。第1部分"XML基础"包括XML结构和概念,XML/C++概述。第2部分"用C++处理XML"包括事件驱动过程,SAX C++,SAX C++2.0及高级技术... -
c++ xml数据的读写.zip
2020-09-13 22:17:59本软件是用vs2017编写的小功能软件,主要是用于XML数据格式的创建,读取等基本操作。语言c++。 -
C++读入XML文件
2021-01-21 17:09:33近要做一个VRP的算法,测试集都是放在Xml文件中,而我的算法使用C++来写,所以需要用C++来读取Xml文件。 在百度上搜“C++读取Xml文件”,可以出来很多博客,大多数是关于tinyXml的,所以这篇博文也是讲述如何用... -
C++解析xml文件
2018-06-29 14:11:30C++实现对xml文件的解析,C++实现对xml文件的解析,C++实现对xml文件的解析。 -
C++ XML文件写入
2015-12-25 12:22:15一个简单的C++写入XML文件的方法,调用了BOOST库函数。 -
C++ XML操作类
2019-03-03 11:04:09C++ XML操作类 转载自:http://beself.top/2019/03/03/c-xml%E6%93%8D%E4%BD%9C%E7%B1%BB/ gitee源码:https://gitee.com/ALONE_WORK/MFCClass 此类是在使用VS开发,开发使用了树形数据结构来保存,并且在程序中都是...C++ XML操作类
转载自:http://beself.top/2019/03/03/c-xml%E6%93%8D%E4%BD%9C%E7%B1%BB/
gitee源码:https://gitee.com/ALONE_WORK/MFCClass此类是在使用VS开发,开发使用了树形数据结构来保存,并且在程序中都是使用递归的方法来使用树形数据结构。使用时请自己先掌握基本用法。
公共方法
/ 设置xml文件目录,FileName:xml数据文件名(目录) SetXmlFileName(const std::string FileName); 取数据 *ReadXmlFileName(); XML数据节点-增加节点时只增加节点名,如果需要增加节点的属性,再调用AddXmlAttrValue来增加节点属性值 AddXmlNodeData(XMLFileData *XmlData, const std::string ParentNodeName, const std::string NodeName); 节点添加属性值 AddXmlAttrValue(XMLFileData *XmlData, const std::string NodeName, const std::string AttrName, const std::string AttrValue); 节点属性值 DeleteXmlAttrValue(XMLFileData *XmlData, const std::string NodeName, const std::string AttrName); xml节点值 ModifiedXmlNodeValue(const std::string NodeName, const std::string Value); 想xml节点属性值,修改完成后自动保存到xml文件,无需另外保存 ModifiedXmlNodeAttr(XMLFileData *XmlData, const std::string NodeName, const std::string AttrName, const std::string AttrValue); 子节点-删除子节点时会删除包括子节点下的所有数据 DeleteXmlChildNode(XMLFileData *XmlData, const std::string NodeName); xml文件 SaveXmlData(const XMLFileData XmlData); XML数据 ReleaseXmlData(XMLFileData *XmlData);
类声明及使用方法
- 声明头文件:include “JXML.h”
- 初始化对象: JXML xml(“data.xml”); 注:在初始化时要初始化xml文件名(包含目录)
- 读取xml: XMLFileData *xmlData = xml.ReadXmlFileName(); 注:读取时需要声明XmlFileData树形结构
- 释放XmlFileData树形内存:最后在使用完成后需要释放空间-xml.ReleaseXmlData(xmlData);释放XmlFileData树形内存:最后在使用完成后需要释放空间-xml.ReleaseXmlData(xmlData);
-
C++ XML读写
2013-01-25 15:07:47C++ XML读写 -
linux C++ XML文件创建、读取和修改实例
2020-12-17 11:13:330. XML文件 可扩展标记语言,标准通用标记语言的子集,简称XML。是一种用于标记电子文件使其具有结构性的标记语言。 在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种...0. XML文件
可扩展标记语言,标准通用标记语言的子集,简称XML。是一种用于标记电子文件使其具有结构性的标记语言。
在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。是Internet环境中跨平台的、依赖于内容的技术,也是当今处理分布式结构信息的有效工具。早在1998年,W3C就发布了XML1.0规范,使用它来简化Internet的文档信息传输。
XML的简单易于在任何应用程序中读/写数据,这使XML很快成为数据交换的唯一公共语言,虽然不同的应用软件也支持其他的数据交换格式,但不久之后它们都将支持XML,那就意味着程序可以更容易的与Windows、Mac OS、Linux以及其他平台下产生的信息结合,然后可以很容易加载XML数据到程序中并分析它,并以XML格式输出结果。
1. XML文件格式
XML文件格式是纯文本格式,在许多方面类似于HTML,XML由XML元素组成,每个XML元素包括一个开始标记(<title>),一个结束标记(</title>)以及两个标记之间的内容,例如,可以将XML元素标记为价格、订单编号或名称。标记是对文档存储格式和逻辑结构的描述。在形式上,标记中可能包括注释、引用、字符数据段、起始标记、结束标记、空元素、文档类型声明( DTD)和序言。
具体规则如下:
XML声明是XML文档的第一句,其格式如下:
<?xml version="1.0" encoding="UTF-8"?>
2、注意大小写
在XML文档中,大小写是有区别的。“<P>”和“<p>”是不同的标记。注意在写元素时,前后标记的大小写要保持一致。最好养成一种习惯,或者全部大写,或者全部小写,或者大写第一个字母,这样可以减少因为大小写不匹配而产生的文档错误。
3、XML文档有且只有一个根元素
良好格式的XML文档必须有一个根元素,就是紧接着声明后面建立的第一个元素,其他元素都是这个根元素的子元素,根元素完全包括文档中其他所有的元素。根元素的起始标记要放在所有其他元素的起始标记之前;根元素的结束标记要放在所有其他元素的结束标记之后。
4、属性值使用引号
在HTML代码里面,属性值可以加引号,也可以不加。但是XML规定,所有属性值必须加引号(可以是单引号,也可以是双引号,建议使用双引号),否则将被视为错误。
<?xml version="1.0" encoding="UTF-8"?>
5、所有的标记必须有相应的结束标记
在HTML中,标记可以不成对出现,而在XML中,所有标记必须成对出现,有一个开始标记,就必须有一个结束标记,否则将被视为错误。
6、所有的空标记也必须被关闭
空标记是指标记对之间没有内容的标记,比如“<img>”等标记。在XML中,规定所有的标记必须有结束标记。
一个XML文件例子
<?xml version="1.0" encoding="UTF-8"?> <root> <montitor> <name>伍六七</name><!--监控的程序名称--> <path>/usr/bin/</path><!--程序绝对路径--> <interval>30</interval><!--间隔多久监控一次--> <restartwait>30</restartwait><!--程序被重启后,等待多久再进行监控--> <ip>127.0.0.1</ip><!--程序IP--> <port>9878</port><!--程序端口--> <request>1;monitor</request><!--发送给程序的报文--> <response>The ftp is working ok.</response><!--程序给监控的反馈报文--> <log> <folderpath>log/</folderpath><!--程序日志保存目录--> <savedays>2</savedays><!--程序日志保存时间--> </log> </montitor> </root>
2.LINUX 下C++ XML编程
C++ XML文件的创建、解析,修改,可参考下面链接,清晰易实现。
https://blog.csdn.net/hpu11/article/details/80793303
补充一个读取XML文件,并修改属性的例子
#include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <string.h> #include <iostream> #include <libxml/parser.h> #include <libxml/xmlmemory.h> //#include <tinyxml.h> using namespace std; // XML文件路径 char *xml_PATH = (char *)"netConfig.xml"; int main(int agrc,char *argv[]) { xmlChar * value = NULL; xmlKeepBlanksDefault(0); //忽略空格、回车 /* 获取xml文件指针 */ xmlDocPtr pDoc = xmlReadFile(xml_PATH,NULL,XML_PARSE_RECOVER); if(pDoc == NULL) { cout<<"xml open failed"<<endl; //若文件指针为空,则报告文件打开失败 return 0; } /* 获取根节点 */ xmlNodePtr pRoot = xmlDocGetRootElement(pDoc); if(NULL == pRoot) { cout << "get xml Node failed"<<endl; xmlFreeDoc(pDoc); //若获取根节点失败,则释放xml文件指针 return 0; } printf("Node name is \"%s\"\n",pRoot->name); //根结点名称 /*从根节点往下查找子节点*/ xmlNodePtr pFirst = pRoot->xmlChildrenNode; if(NULL == pFirst) { printf("%s No children Node!\n",pRoot->name); xmlFreeDoc(pDoc); //若无子节点,则释放xml文件指针 return 0; } printf("The %s Node‘ children node name is \"%s\"\n",pRoot->name,pFirst -> name); xmlNodePtr pSecond = pFirst->children; /*修改Psecond 属性 “name”“伍六七”*/ if (!xmlStrcmp(pSecond->name, BAD_CAST "name")) { xmlNodeSetContent(pSecond, BAD_CAST "伍六七"); } if (NULL == pSecond) { printf("%s No children Node!\n",pSecond -> name); xmlFreeDoc(pDoc); //若无子节点,则释放xml文件指针 return 0; } value = xmlNodeGetContent(pSecond); printf("The Second Node name is \"%s\" --> \"%s\"\n",pSecond -> name,value); xmlNodePtr pThird = pSecond->next; if (NULL == pThird) { printf("%s No children Node!\n",pThird -> name); xmlFreeDoc(pDoc); //若无子节点,则释放xml文件指针 return 0; } while(pThird != NULL) { if(!xmlStrcmp(pThird->name,BAD_CAST"comment")) { printf("xmlStrcmp == 0 \n"); pThird = pThird->next; } value = xmlNodeGetContent(pThird); printf("The Node name is \"%s\" --> \"%s\"\n",pThird -> name,value); pThird = pThird->next; } if(NULL == pThird) printf("No more node!\n"); /*保存修改后的XML文件*/ int nRel = xmlSaveFile("netConfig.xml",pDoc); if (nRel != -1) { cout<<"一个xml文档被创建,写入"<<nRel<<"个字节"<<endl; } xmlFreeDoc(pDoc); //使用完成后,释放XML指针; return 0; }
3. LINUX 下C++ XML编译命令
g++ xml1.cpp -o main -I /usr/include/libxml2 -L /usr/local/lib -lxml2
需要链接libxml2 和 xml2的头文件,如系统中未有此库,需提前安装。
-
C++ xml 操作 类
2016-11-03 10:23:26C++ xml 操作 类 -
C/C++利用libxml2高效输出XML大文件详解
2020-12-26 02:22:35Libxml2 是一个xml c语言版的解析器,本来是为Gnome项目开发的工具,是一个基于MIT License的免费开源软件。它除了支持c语言版以外,还支持c++、PHP、Pascal、Ruby、Tcl等语言的绑定,能在Windows、Linux、Solaris、... -
最新2021年9月4日tinyxml2 开源的C++ XML 文件解析库 建立的qt pro工程测试+测试说明文档
2022-03-14 18:40:201:TinyXML2 是 simple、small、efficient 开源的 C++ XML 文件解析库 2:最新2021年9月4日 加入tinyxml2.cpp 和 tinyxml2.h 即可#include "tinyxml2.h" 3:建立的qt pro工程测试 4:带有精简版测试说明,pdf格式 化繁... -
c++生成xml文件2种办法
2017-08-10 23:10:38C++生成XML文件可行办法(2种,附有代码) -
C++ XML Objects-开源
2021-04-24 17:02:46用于将C ++对象的继承关系持久化到XML或从XML持久化的框架。 Boost,STL和Patterns被广泛使用。 将支持所有支持Boost的平台。 -
C++结构体和json/xml之间互相转换
2021-02-09 10:36:24用于在C++结构体和json/xml之间互相转换, bson在xbson中支持。 只需要头文件, 无需编译库文件。 具体可以参考example的例子 -
C++利用XML代码快速生成EXCEL表格
2019-01-04 15:53:09使用C++语言,可以实现高效率EXCEL表格(.XLS格式)生成。程序内可编辑表格内容,亦含有生成时间测试代码。 -
c++ XML读写
2012-05-10 17:48:43c++ XML文件读写,修改,增加,删除等操作,供有需要的同学学习。 -
使用c++生成xml文件
2017-01-18 21:16:58使用c++语言将其它类型的文件生成xml文件 -
C++ XML简析-附件资源
2021-03-05 15:26:32C++ XML简析-附件资源