您好,欢迎来到小侦探旅游网。
搜索
您的当前位置:首页c++操作xml

c++操作xml

来源:小侦探旅游网


c++操作xml

C++标准库中没有操作XML的方法,用C++操作XML文件必须熟悉一种函数库,选用LIBXML2

Libxml2是一个C语言的XML程序库,可以简单方便的提供对XML文档的各种操作,并且支持XPATH查询,以及部分的支持XSLT转换等功能。

Libxml2的下载地址是http://xmlsoft.org/

windows版本的的下载地址是http://www.zlatkovic.com/libxml.en.html

libxml2库依赖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.win32\\bin;zlib-1.2.3.win32\\bin;libxml2-2.6.30.win32\\bin这三个地址。或者把其中的三个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/09

created: 9:11:2007 15:34

filename: CreateXmlFile.cpp

author: Wang xuebin

depend: libxml2.lib

build: nmake TARGET_NAME=CreateXmlFile

purpose: 创建一个xml文件

*********************************************************************/

#pragma comment(lib,\"libxml2.lib\")

#pragma comment(lib,\"iconv.lib\")

#include

#include

#include

#include

using namespace std;

int main()

{

//定义文档和节点指针

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\

//创建一个儿子和孙子节点

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\

if (nRel != -1)

{

cout<<\"一个xml文档被创建,写入\"<}

//释放文档内节点动态申请的内存

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

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- xiaozhentang.com 版权所有 湘ICP备2023022495号-4

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务