windows下xmllib2使用简介 64位

1:环境配置

包含目录下    包含include    libxml2_64\include           包含xmllib库路径  libxml2_64    注意 libxml分为32位程序和64位程序,这两种的环境需要的lib不一样,需要分别下载

需要使用库  libxml2.lib  

注意:往xml文件中写入数据只能是utf-8类型的 所以当往xml文件中输入中文时候需要把GBK2312转换为utf-8,解析的时候需要把utf8转换为GBK2312,使用的函数

static int GB2312ToUtf8(const char* gb2312, char* utf8)
{
int len = MultiByteToWideChar(CP_ACP, 0, gb2312, -1, NULL, 0);
wchar_t* wstr = new wchar_t[len+1];
memset(wstr, 0, len+1);
MultiByteToWideChar(CP_ACP, 0, gb2312, -1, wstr, len);
len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);
WideCharToMultiByte(CP_UTF8, 0, wstr, -1, utf8, len, NULL, NULL);
if(wstr) delete[] wstr;
return len;
}


//UTF-8到GB2312的转换
static int Utf8ToGB2312(const char* utf8, char* gb2312)
{
int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);
wchar_t* wstr = new wchar_t[len+1];
memset(wstr, 0, len+1);
MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wstr, len);
len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);
WideCharToMultiByte(CP_ACP, 0, wstr, -1, gb2312, len, NULL, NULL);
if(wstr) delete[] wstr;
return len;
}

使用xml文件

创建xml文件并写入相应节点

int write_xml(char *filename,char*node,char*data) //filename:: xml文件名 node::写入的节点名 data:写入的节点数据
{
xmlDocPtr doc;
doc = xmlReadFile(filename, "GB2312", XML_PARSE_NOBLANKS);
if(doc == NULL) //文件不存在 创建一个新文件
{
xmlDocPtr doc = xmlNewDoc(BAD_CAST"1.0");
xmlNodePtr root_node = xmlNewNode(NULL,BAD_CAST"root");
//设置根节点
xmlDocSetRootElement(doc,root_node);
xmlNewTextChild(root_node, NULL, BAD_CAST node, BAD_CAST data);
xmlSaveFormatFileEnc(filename,doc,"GB2312",1);
xmlFreeDoc(doc);
return 0;
}
xmlNodePtr cur;
cur = xmlDocGetRootElement(doc);
if(cur == NULL)
{
xmlFreeDoc(doc);
return -1;
}
xmlNewTextChild(cur, NULL, BAD_CAST node, BAD_CAST data);

int nRel = xmlSaveFormatFileEnc(filename,doc,"GB2312",1);
xmlFreeDoc(doc);
return 0;
}

 

解析xml文件

xmlChar* ReadXml(char* filename,char* node_content) //filename:xml文件名 node_content:xml节点的节点名
{
xmlDocPtr doc; //定义解析文档指针
xmlNodePtr node; //定义结点指针(你需要它为了在各个结点间移动)
xmlKeepBlanksDefault(0); //避免将空格当作一个节点
doc = xmlParseFile(filename);
if(doc == NULL) //xml文件不存在
{
fprintf(stderr,"parse error\n");
return NULL;
}
node = xmlDocGetRootElement(doc);
if(node == NULL)
{
fprintf(stderr, "doc has no content\n");
}
char str[256]={0};
node = node->children;
while(node != NULL)
{
if(xmlStrcmp(node->name,(const xmlChar*)node_content)==0)
{
return xmlNodeGetContent(node);
}
node = node->next;
}
xmlFreeDoc(doc);
return NULL;
}

注意:xml文件原型其实是个二叉树,用链表组成的,使用的时候首先打开文件,找到头节点,然后在往头结点添加新节点和给新节点添加属性,具体不一一列举

特别注意:xml文件的节点名称不能是数字,必须是字母(字母后面可以接数字),否则解析xml文件时不能识别该节点

转载于:https://www.cnblogs.com/jameflight/p/9806547.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/449530.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

backtrader2

backtrader的基本策略构成: #构成 #Backtrader 回测代码编写流程如下: import backtrader as bt # 导入 Backtrader import backtrader.indicators as btind # 导入策略分析模块 import backtrader.feeds as btfeeds # 导入数据模块# 创建策略 class T…

解决浏览器 Provisional headers are shown 无法向后台发送请求问题

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 我的情况和下面情况一样,有一个断点。 今天调试项目BUG,页面的一个按钮点击后页面无反应,去后台找对…

台湾邮政历史常设展重新开幕

1月29日,重新开幕的台湾邮政历史常设展增加了与观众的对话和互动,希望吸引不同年龄层观众。中新社记者 孔任远 摄 1月29日,重新开幕的台湾邮政历史常设展增加了与观众的对话和互动,希望吸引不同年龄层观众。中新社记者 孔任远 摄 …

如何用vc6编译ffmpeg, 并单步调试。

如何用vc6编译ffmpeg, 并单步调试。目前官方ffmpeg的最新版本为0.9, 我们就以此为例: 1. 下载最新git版本的源代码(http://ffmpeg.zeranoe.com/builds/, 本例下载的是2011-12-12版本) 2. 放到MSYS环境里配置,生成config.h文件。mingw gcc是能顺利编译…

backtrader指标

添加分析指标 # 添加分析指标 # 返回年初至年末的年度收益率 cerebro.addanalyzer(bt.analyzers.AnnualReturn, _name_AnnualReturn) # 计算最大回撤相关指标 cerebro.addanalyzer(bt.analyzers.DrawDown, _name_DrawDown) # 计算年化收益:日度收益 cerebro.addana…

Javascript DOM对属性的操作

获得属性值 itnode . 属性名称          //只能操作w3c规定内容 itnode . getAttribute(属性名称)    //规定的 和 自定义的都可以获取 设置属性值 itnode . 属性名称 值        //只能操作w3c规定的属性 itnode . setAttribute(名称,值) …

172开头的IP不一定是局域网的地址

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 A类 10.0.0.0-10.255.255.255 网络数:1B类 172.16.0.0-172.31.255.255 网络数:16C类 192.168.0.0-192.168.255.…

微信屏蔽百度红包活动页面,谁在焦虑?

1月29日消息,百度与中央电视台合作的百度红包链接分享页面被微信屏蔽,打开相关页面显示:网页包含诱导分享、关注等诱导行为内容,被多人投诉,为维护绿色上网环境,已经停止访问该网页。 雷锋网了解到&#x…

Visual C++利用Intel C++ 编译器提升多核性能与多媒体指令支持获取更高的程序效率与缩小程序体积

Intel c编译器有下列优点,建议VC项目开发采用intel c编译器取代VS自带c编译器: 与 Microsoft Visual C 相兼容,可以嵌入 Microsoft Visual Studio 开发环境。 支持最新的多核处理器,并提供安全功能,可以通过执行堆栈…

Backtrader交易基础

查看账户情况: class TestStrategy(bt.Strategy):def next(self):print(当前可用资金, self.broker.getcash())print(当前总资产, self.broker.getvalue())print(当前持仓量, self.broker.getposition(self.data).size)print(当前持仓成本, self.broker.getpositio…

IP地址分类/IP地址10开头和172开头和192开头的区别

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 IP地址分类/IP地址10开头和172开头和192开头的区别/判断是否同一网段 简单来说在公司或企业内部看到的就基本都是内网IP,AB…

Redis数据结构之简单动态字符串SDS

Redis的底层数据结构非常多,其中包括SDS、ZipList、SkipList、LinkedList、HashTable、Intset等。如果你对Redis的理解还只停留在get、set的水平的话,是远远不足以应对面试提问的。本文简单介绍了Redis底层最重要的数据结构 - 简单动态字符串&#xff08…

Centos7 安装OpenTSDB

Centos7 安装OpenTSDB https://www.imzcy.cn/1697.html转载于:https://www.cnblogs.com/RHadoop-Hive/p/10563385.html

职场潜规则冷思考:别让老板“杀”了你

一位3年前共事过的同事走了,就在他以200多万的房贷代价拿到大门钥匙的时候,猝然倒在新房的楼梯上。另一个曾经在同一战壕里冲锋陷阵的同事被老板辞掉了,兢兢业业,起早贪黑,竟然没有熬过35岁下岗这一关,这时…

Backtrader交易基础2

成交价格确定: Order.Market 市价单,以当时市场价格成交的订单,不需要自己设定价格。市价单能被快速达成交易,防止踏空,尽快止损/止盈; 按下一个 Bar (即生成订单的那个交易日的下一个交易日&…

windows 小技巧

2019独角兽企业重金招聘Python工程师标准>>> 桌面图标显示不全、图标呈现白色方块 ie4uinit -show 关闭占用指定端口的进程 获取进程: netstat -ano | findstr 端口号关闭进程:taskkill -f -pid 进程号文件被占用 打开任务管理器,切换到 性能…

进一步了解 apt-get 的几个命令

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 用 apt-get 也很久了,没多想它的实现,最近遇到 gstreamer 装不上的问题,才多看看了它 apt-get 就是…

java学习笔记20(Arraylist复习,Collection接口方法,迭代器,增强型for循环)

集合:集合是Java提供的一种容器,可以用来存储多个数据; 集合与数组的区别:集合的长度是可变的,数组的长度是固定的 集合中存储的数据必须是引用类型数据; ArrayList回顾: public class Person {…

backtrader数据基础

cerebro bt.Cerebro() cerebro.addstrategy(TestStrategy2) codes[600862.SH,300326.SZ,300394.SZ] #加载最近两日交易数据 for code in codes:feed Addmoredata(dataname get_data(code,20200506),namecode)cerebro.adddata(feed) cerebro.run() 数据查看: cl…

谈判学:三招了解对方底线

导读:谈判者都希望能了解对方的底线,最直接的一招就是将对手变成“朋友”,只是这种“内奸法”毕竟不是常规之法。大多数情况下,谈判双方也不可能像《无间道》一样在对方阵营安放卧底,但是我们完全可以通过一些办法来揣…