- 浏览: 218852 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (163)
- c++ (30)
- JavaScript (30)
- java (61)
- jQuery (3)
- ACE (2)
- oracle (9)
- jni (0)
- android (2)
- shell (1)
- myeclipse (1)
- Hibernate (1)
- linux (2)
- sqlserver (2)
- windows (2)
- sql (2)
- php (2)
- css (1)
- 学习 (1)
- ExtJs (1)
- RSS (1)
- 报文 (1)
- 跟我学Spring3 (6)
- dos (1)
- server (1)
- nosql (4)
- mongodb (6)
- photoshop (1)
- WebService (2)
- 股票 (1)
- OpenGL (3)
- Spring3MVC (6)
- 生活 (1)
- struts2 (1)
- 云盘 (1)
- blog (1)
- nosql nodejs mongoose (1)
最新评论
-
sblig:
配置分片: mongo -port 27017config ...
搭建Mongodb集群:分片Sharding+副本集Replica Set -
sblig:
配置路由:mongs: 40000 40100 40200sc ...
搭建Mongodb集群:分片Sharding+副本集Replica Set -
fuanyu:
哥们,干得漂亮。。
struts2 高危漏洞修复 -
sblig:
配置列子如下
<?xml version="1 ...
跟我学Spring3 学习笔记一 -
sblig:
307622798 写道博主你好,最近在看你的js系列文章,发 ...
JavaScript 学习笔记 二 对象的访问
xml数据结构: 生成xmldoc、获得根节点,获得子节点
xmlChar:对char的基本代替,是一个UTF-8编码字符串中的一个字节
xmlDoc 和 xmlDocPtr: 树的结构
xmlNode 和 xmlNodePtr:单个节点的结构//4. 解析xml字符串
xmlDocPtr doc = xmlParseMemory(pXml, length);
//根据xmldoc获得xml的根节点
xmlNodePtr cur = xmlDocGetRootElement(doc);
//获得子节点:->children获得不是第一个子节点,必须用next才能获得第一个子节点
cur = cur->children;
cur = cur->next;
// 获得节点信息中的内容: 注意释放资源
xmlChar* key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
xmlFree(key);
//获得节点信息属性的值:属性name,注意释放资源
xmlChar* fversion = xmlGetProp(cur, "version");
xmlFree(fversion);
//根节点相关函数
xmlNodePtr xmlDocGetRootElement (xmlDocPtr doc) //获取文档根节点
xmlNodePtr xmlDocSetRootElement (xmlDocPtr doc, xmlNodePtr root) //设置文档根节点
//创建子节点相关函数
xmlNodePtr xmlNewNode (xmlNsPtr ns, const xmlChar * name) //创建新节点
xmlNodePtr xmlNewChild (xmlNodePtr parent, xmlNsPtr ns, const xmlChar * name, const xmlChar * content) //创建新的子节点
xmlNodePtr xmlCopyNode (const xmlNodePtr node, int extended) //复制当前节点
//添加子节点相关函数
xmlNodePtr xmlAddChild (xmlNodePtr parent, xmlNodePtr cur) //给指定节点添加子节点
xmlNodePtr xmlAddNextSibling (xmlNodePtr cur, xmlNodePtr elem) //添加后一个兄弟节点
xmlNodePtr xmlAddPrevSibling (xmlNodePtr cur, xmlNodePtr elem) //添加前一个兄弟节点
xmlNodePtr xmlAddSibling (xmlNodePtr cur, xmlNodePtr elem) //添加兄弟节点
//属性相关函数
xmlAttrPtr xmlNewProp (xmlNodePtr node, const xmlChar * name, const xmlChar * value) //创建新节点属性
xmlChar * xmlGetProp (xmlNodePtr node, const xmlChar * name) //读取节点属性
xmlAttrPtr xmlSetProp (xmlNodePtr node, const xmlChar * name, const xmlChar * value) //设置节点属性
=xmlNodeListGetstring(doc, cur->xmlChildrenNode, 1);
=xmlNodeContent(cur);
对一个xmldoc解析解析
void CCommunicationThread::parseXml_doc(xmlDocPtr doc, xmlNodePtr cur, const char* path) { //1.进入xml的目录时:判断该目录是否存在?否则创建 cur = cur->children; if (cur == NULL) return; cur = cur->next; if (cur == NULL) return; check_and_create_path(path); SVN_MAP file_map; char* pMapBuffer = this->get_fileInfor_list(path, file_map); //2.将服务器的新版、新增文件信息,压入准备下载的队列,启动线程开始下载. xmlChar* fileName; xmlChar* fileVersion; SVN_MAP map_new; while ( cur != NULL) { if (strcmp((char*)cur->name, "folder") == 0) { string curPath = path; fileName = xmlGetProp(cur, (const xmlChar *)"name"); curPath = curPath + "\\" + (char*)fileName; parseXml_doc(doc, cur, curPath.c_str()); } else if (strcmp((char*)cur->name, "file") == 0) { // 判断一个文件是否存在?文件是否修改?文件版本号是否与当前的版本号相同? fileName = xmlGetProp(cur, (const xmlChar *)"name"); fileVersion = xmlGetProp(cur, (const xmlChar *)"version"); FILE_SVN_INFOR* svn_infor = new FILE_SVN_INFOR; strcpy(svn_infor->filename, (const char*)fileName); svn_infor->version = 0; SVN_MAP::iterator it = file_map.find((char*)fileName); if (it != file_map.end()) { // 找到该信息,查看版本号 if (atoi((const char*)fileVersion) > it->second->version)//新版本 { File_Infor* infor = new File_Infor(); strcpy(infor->command, CMD_DOWNLOAD); strcpy(infor->param.download.fileName, (const char*)fileName); this->push_list(infor); } svn_infor->md5 = it->second->md5; } else { // 新增 File_Infor* infor = new File_Infor(); strcpy(infor->command, CMD_DOWNLOAD); strcpy(infor->param.download.fileName, (const char*)fileName); this->push_list(infor); memset(&svn_infor->md5, 0, sizeof(MD5)); } // 组织新的.svn文件 map_new[svn_infor->filename] = svn_infor; xmlFree(fileName); xmlFree(fileVersion); } cur = cur->next; } //3.在退出xml目录时:根据文件新的版本存储.svn文件 free(pMapBuffer); set_fileInfor_list(path, map_new); for ( SVN_MAP::iterator it = map_new.begin(); it != map_new.end(); it++ ) { delete it->second; } map_new.clear(); return; }
发表评论
-
OpenGL 图形编程 学习笔记 三
2013-01-04 13:54 1821[2012-12-31 16:53] openGL笔记 ... -
OpenGL 图形编程 学习笔记 二
2013-01-04 13:48 1184[2012-12-31 16:38] OpenGL ... -
OpenGL 图形编程 学习笔记 一
2013-01-04 13:45 1097[2012-12-31 16:15] OpenGL学习笔 ... -
Boost 学习笔记 第一天
2012-12-07 10:50 9751. timer.hpp timer接口简单,轻 ... -
“工业级” 断言
2012-09-06 12:30 963class Assert { public: A ... -
算法学习 之遍历
2012-05-22 14:22 1073/********************广度优先遍历算 ... -
算法学习 之链表
2012-05-22 13:52 977/**********开放定址哈希表的存储结构***** ... -
算法学习 之查询
2012-05-22 11:45 865/******************顺序查找***** ... -
算法学习 之排序
2012-05-07 11:42 903/***********直接插入排序********** ... -
日常开发有用标签 五
2012-04-11 10:42 880linux cmd Mr__zh ... -
日常开发有用标签 四
2012-04-11 10:38 754java I/O 深入分析 Java ... -
日常开发有用标签 三
2012-04-11 10:37 861java thread java并发编程- ... -
日常开发有用标签 二
2012-04-11 10:35 664java 100个Java经典例子(41- ... -
日常开发有用标签 一
2012-04-11 10:31 911工具 Linux 常用C函数(中文版) ... -
C++ Primer 笔记七
2012-03-27 16:15 872每个类都定义了一个接口和一个实现。接口由使用该类的代码需要执行 ... -
C++ Primer 笔记六
2012-03-07 14:38 803typedef 通常被用于以下三种目的: 1.为了隐藏特定类型 ... -
C++ Primer 笔记五 引用(const)1
2012-02-24 17:50 1220定义 const 对象常量在定义后就不能被修改,所以定义时必须 ... -
C++ Primer 笔记四
2012-02-22 15:38 10121.内置类型变量是否自动初始化取决于变量定义的位置。在函数体外 ... -
C++ Primer 笔记三
2012-02-22 12:53 848初始化变量定义指定了变量的类型和标识符,也可以为对象提供初始值 ... -
C++ Primer 笔记二
2012-02-16 16:09 898/* * main.cpp * Created on ...
相关推荐
libxml2-2.7.4,能够解析并生成xml格式的文件
libxml2是一个用来解析XML文档的函数库。它用 C 语言写成,并且能被多种语言所调用,如 C、C++、XSH、C#、Python、Kylix、Delphi、Ruby、PHP 等。 注:先解压得到libxml2-2.9.1.tar.gz文件,然后再拷贝到linux系统...
开源跨平台XML解析器-LIBXML2--库-SOLARIS10/SPARC,源代码可从http://xmlsoft.org/downloads.html或资源“开源跨平台XML解析器-LIBXML2--C源代码及VC6工程文件”获取
开源跨平台XML解析器-LIBXML2--库-hpux 11/ia64,源代码可从http://xmlsoft.org/downloads.html或资源“开源跨平台XML解析器-LIBXML2--C源代码及VC6工程文件”获取
libxml2-2.9.7.tar.gz python下载包 libxml用于解析xml格式文档。 可是用于自定义的html,xml等文档的解析工作
开源跨平台XML解析器-LIBXML2--库-REDHAT9/X86,源代码可从http://xmlsoft.org/downloads.html或资源“开源跨平台XML解析器-LIBXML2--C源代码及VC6工程文件”获取
开源跨平台XML解析器-LIBXML2--库-rhel5/x86_64,源代码可从http://xmlsoft.org/downloads.html或资源“开源跨平台XML解析器-LIBXML2--C源代码及VC6工程文件”获取
libxml用于解析xml格式文档。 可是用于自定义的html,xml等文档的解析工作
Libxml2 是一个xml c语言版的解析器,本来是为Gnome项目开发的工具,是一个基于MIT License的免费开源软件。它除了支持c语言版以外,还支持c++、PHP、Pascal、Ruby、Tcl等语言的绑定,能在Windows、Linux、Solaris、...
xml解析使用的libxml2,可以使用的版本。
利用libxml2生成,解析,修改xml文件示例,安装libxml2库, sudo apt-get install libxml2-dev。使用libxml2库进行xml文件的操作,取出了平台差异化,便于在不同的平台都可以进行文件的操作,不受平台系统的限制,...
libxml2 2.9.0 为Gnome项目开发的一套基于C语言的XML解析程序,授权协议:MIT License ,功能很强大,速度也很快
Libxml2 是一个xml c语言版的解析器,本来是为Gnome项目开发的工具,是一个基于MIT License的免费开源软件。它除了支持c语言版以外,还支持c++、PHP、Pascal、Ruby、Tcl等语言的绑定,能在Windows、Linux、Solaris、...
开源跨平台XML解析器-LIBXML2,V2.7.8,以及WIN32下的VC6和codeblocks工程文件
Libxml2 是一个xml c语言版的解析器,本来是为Gnome项目开发的工具,是一个基于MIT License的免费开源软件。它除了支持c语言版以外,还支持c++、PHP、Pascal、Ruby、Tcl等语言的绑定,能在Windows、Linux、Solaris、...
该libxml2的软件包包含XML库。这些对于解析XML文件很有用。已知此软件包可使用LFS-7.1平台构建并正常工作。
libxml2-2.7.8使用范例,调用libxml2-2.7.8 API接口,实现解析和组装xml
使用C语言写的XML解析器,支持各种嵌入式平台,Linux、windows、Win32,以及python等,内含使用范例
libxml2,纯C语言开发,为程序提供函数去解析XML格式的文件。 使用时请遵循GPL。