c++操作xml.pdf
c+操作 xml C+标准库中没有操作XML 的方法,用C+操作 XML 文件必须熟悉一种函数库,选用LIBXML2 Libxml2 是一个 C 语言的 XML 程序库,可以简单方便的提供对XML 文档的各种操作,并且支持XPATH查询,以及部分的支持XSLT 转换等功能。Libxml2 的下载地址是http:/xmlsoft.org/windows 版本的的下载地址是http:/ 库依赖 iconv 和 zlib 库,所以需要下载三个成功版本 libxml2-2.6.30.win32.zip、zlib-1.2.3.win32.zip和 iconv-1.9.2.win32.zip。解压,在系统变量path 中加上iconv-1.9.2.win32bin;zlib-1.2.3.win32bin;libxml2-2.6.30.win32bin这三个地址。或者把其中的三个dll 到拷贝到 system32 目录中编译链接基于libxml2 的程序,在 VC 环境中设置lib 和 include 路径,并在link 设置中添加libxml2.lib 和iconv.lib.vc:项目-属性-c/c+-常规-附加包含目录,将三个文件夹的include 下的.h 头文件包含进工程项目-属性-链接器-常规-附加库目录,将三个文件夹的bin 下的.lib 库文件包含进工程注意,这只是将目录包含进工程,需要使用时需在代码中写#include(eg)和#pragma comment(lib,libxml2.lib)(eg)实验代码如下/*created:2007/11/09created:9:11:2007 15:34filename:CreateXmlFile.cppauthor:Wang xuebin depend:libxml2.lib build:nmake TARGET_NAME=CreateXmlFilepurpose:创建一个xml 文件*/#pragma comment(lib,libxml2.lib)#pragma comment(lib,iconv.lib)#include#include#include#include using namespace std;int main()/定义文档和节点指针xmlDocPtr doc=xmlNewDoc(BAD_CAST1.0);xmlNodePtr root_node=xmlNewNode(NULL,BAD_CASTroot);/设置根节点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_CASTnode2);xmlNodePtr content=xmlNewText(BAD_CASTNODE CONTENT);xmlAddChild(root_node,node);xmlAddChild(node,content);xmlNewProp(node,BAD_CASTattribute,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!=-1)cout 一个 xml 文档被创建,写入 nRel 个字节 endl;/释放文档内节点动态申请的内存xmlFreeDoc(doc);return 1;创建一个 xml 文档其流程如下:l 用 xmlNewDoc函数创建一个文档指针doc;l 用 xmlNewNode函数创建一个节点指针root_node;l 用 xmlDocSetRootElement将 root_node设置为 doc 的根结点;l 给 root_node 添加一系列的子节点,并设置子节点的内容和属性;l 用 xmlSaveFile将 xml 文档存入文件;l 用 xmlFreeDoc函数关闭文档指针,并清除本文档中所有节点动态申请的内存。注意,有多种方式可以添加子节点:第一是用xmlNewTextChild直接添加一个文本子节点;第二是先创建新节点,然后用xmlAddChild将新节点加入上层节点。产生如下文件-newNode1 content newNode2 content newNode3 content NODE CONTENT-This is a grandson node