XML_CPP_libXml2_VC6_Code_ZC
ZC:iconv.dll、libxml2.dll、zlib1.dll 放到 exe所在目录下
1、代码来源于 帖子:XML_CPP_资料_libXml2_01_Code_ZC(?.pro)
2、代码:
#include <stdio.h>
#include <windows.h> #include <libxml/parser.h>
#include <libxml/tree.h> #pragma comment(lib, "libxml2.lib")
#pragma comment(lib, "iconv.lib")
#pragma comment(lib, "zlib.lib") // VC6--> Tools --> Options --> Directories --> "Include files" & "Library files" 中添加目录:
// (1.1) E:\ZC_IDE\VC_3rd\libxml2\libxml2-2.6.30.win32\include
// (1.2) E:\ZC_IDE\VC_3rd\libxml2\libxml2-2.6.30.win32\lib
// (2.1) E:\ZC_IDE\VC_3rd\libxml2\iconv-1.9.2.win32\include
// (2.2) E:\ZC_IDE\VC_3rd\libxml2\iconv-1.9.2.win32\lib
// (3.1) E:\ZC_IDE\VC_3rd\libxml2\zlib-1.2.3.win32\include
// (3.2) E:\ZC_IDE\VC_3rd\libxml2\zlib-1.2.3.win32\lib void CreateZ();
void ParserZ(); void main()
{
//CreateZ();
ParserZ();
} // ZC: 创建xml文档
void CreateZ()// void MainWindow::on_pbtnTest01_clicked()
{
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 "newNode1", BAD_CAST "newNode1 content");
xmlNewTextChild(root_node, NULL, BAD_CAST "newNode2", BAD_CAST "newNode2 content");
xmlNewTextChild(root_node, NULL, BAD_CAST "newNode3", BAD_CAST "newNode3 content"); //创建一个节点,设置其内容和属性,然后加入根结点
xmlNodePtr node = xmlNewNode(NULL,BAD_CAST"node2");
xmlNodePtr content = xmlNewText(BAD_CAST"NODE CONTENT");
xmlAddChild(root_node,node);
xmlAddChild(node,content);
xmlNewProp(node,BAD_CAST"attribute",BAD_CAST "yes"); //创建一个儿子和孙子节点
node = xmlNewNode(NULL, BAD_CAST "son");
xmlAddChild(root_node,node);
xmlNodePtr grandson = xmlNewNode(NULL, BAD_CAST "grandson");
xmlAddChild(node,grandson);
xmlAddChild(grandson, xmlNewText(BAD_CAST "This is a grandson node")); //存储xml文档
int nRel = xmlSaveFile("CreatedXml.xml", doc);
if (nRel != -)
{
printf("一个xml文档被创建, 写入%d个字节\n", nRel);
} //释放文档内节点动态申请的内存 xmlFreeDoc(doc);
} // ZC: 解析xml文档
void ParserZ()// void MainWindow::on_pbtnParserXML_clicked()
{
xmlDocPtr doc; //定义解析文档指针
xmlNodePtr curNode; //定义结点指针(你需要它为了在各个结点间移动)
xmlChar *szKey; //临时字符串变量 char *szDocName = "CreatedXml.xml";
doc = xmlReadFile(szDocName, "GB2312", XML_PARSE_RECOVER); //解析文件 //检查解析文档是否成功,如果不成功,libxml将指一个注册的错误并停止。
//一个常见错误是不适当的编码。XML标准文档除了用UTF-8或UTF-16外还可用其它编码保存。
//如果文档是这样,libxml将自动地为你转换到UTF-8。更多关于XML编码信息包含在XML标准中. if (NULL == doc)
{
printf("Document not parsed successfully.\n");
return;
} curNode = xmlDocGetRootElement(doc); //确定文档根元素 /*检查确认当前文档中包含内容*/
if (NULL == curNode)
{
printf("Empty document\n");
xmlFreeDoc(doc);
return;
} /*在这个例子中,我们需要确认文档是正确的类型。“root”是在这个示例中使用文档的根类型。*/
if (xmlStrcmp(curNode->name, BAD_CAST "root"))
{
printf("document of the wrong type, root node != root\n");
xmlFreeDoc(doc);
return;
} curNode = curNode->xmlChildrenNode;
xmlNodePtr propNodePtr = curNode;
while(curNode != NULL)
{
//取出节点中的内容
if ((!xmlStrcmp(curNode->name, (const xmlChar *)"newNode1")))
{
szKey = xmlNodeGetContent(curNode);
printf("newNode1: %s\n", szKey);
xmlFree(szKey);
} //查找带有属性attribute的节点
if (xmlHasProp(curNode,BAD_CAST "attribute"))
{
propNodePtr = curNode;
} curNode = curNode->next;
} //查找属性
xmlAttrPtr attrPtr = propNodePtr->properties;
while (attrPtr != NULL)
{
if (!xmlStrcmp(attrPtr->name, BAD_CAST "attribute"))
{
xmlChar* szAttr = xmlGetProp(propNodePtr,BAD_CAST "attribute");
printf("get attribute = %s\n", szAttr);
xmlFree(szAttr);
}
attrPtr = attrPtr->next;
} xmlFreeDoc(doc);
}
3、
4、
5、
XML_CPP_libXml2_VC6_Code_ZC的更多相关文章
随机推荐
- Web开发笔记 #06# 前后端分离
前后端分离 关于“前后端分离”的深入讨论: 如何正确理解前后端分离? Web 前后端分离的意义大吗? 在上面有看到有谈“国外it公司分工”的回答,感觉挺有意思的.大概是讲国外it公司并不分前后端,只分 ...
- axure rp 8.0注册码(亲测)
今天在看一需求原型时,发现其他部门发过来是8.0版的,老的7不能用,找了个亲测可用的验证码. License:米 业成 (STUDENT)Key:nFmqBBvEqdvbiUjy8NZiyWiRSg3 ...
- 【题解】Luogu P5072 [Ynoi2015]盼君勿忘
众所周知lxl是个毒瘤,Ynoi道道都是神仙题,题面好评 原题传送门 一看这题没有修改操作就知道这是莫队题 我博客里对莫队的简单介绍 既然是莫队,我们就要考虑每多一个数或少一个数对答案的贡献是什么 假 ...
- 题说proxy
昨天在和群友讨论时遇到一题是这样的. 题目描述 //Tomy非常敏感,不喜欢别人碰他的东西.一旦有人碰他就会大喊Don't Touch Me. //完成tomy这个对象,禁止对tomy的内容进行修改( ...
- 【python51--__name__属性】
一.基础知识 1.__name__ == '__main__' 所有模块都有一个__name__属性,__name__的值取决于如何应用模块,在作为独立程序运行的时候,__name__属性的值是‘__ ...
- centos6.8下搭建编译openwrt的环境
1. 安装必要软件 su root yum install zlib-devel zlib-static -y 2. 编译openwrt 请参考这里
- ubuntu upgrade
升级命令 虽然 apt-get 经常被人诟病,但实际上它还是个挺好用的软件包管理器.在 Ubuntu 14.04 以后的系统中,apt-get 相关的升级更新命令有四个: apt-get update ...
- What are the differences between Flyweight and Object Pool patterns?
What are the differences between Flyweight and Object Pool patterns? They differ in the way they are ...
- Python之Requests的高级用法
# 高级用法 本篇文档涵盖了Requests的一些更加高级的特性. ## 会话对象 会话对象让你能够跨请求保持某些参数.它也会在同一个Session实例发出的所有请求之间保持cookies. 会话对象 ...
- HDU 5829 Rikka with Subset(NTT)
题意 给定 \(n\) 个数 \(a_1,a_2,\cdots a_n\),对于每个 \(K\in[1,n]\) ,求出 \(n\) 个数的每个子集的前 \(K\) 大数的和,输出每个值,对 \(99 ...