



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
使用libxml2生成xml文档2009-06-25 23:30Libxml2 是一个xml c语言版的解析器,本来是为Gnome项目开发的工具,是一个基于MIT License的免费开源软件。它除了支持c语言版以外,还支持c+、PHP、Pascal、Ruby、Tcl等语言的绑定,能在Windows、Linux、Solaris、MacOsX等平台上运行。Libxml2主要的优点有:1. 安装、使用比较简单,容易入门;2. 支持的编码格式较多,能很好的解决中文问题(使用一个很简单的编码转换函数);3. 支持Xpath解析(这点对于任意定位xml文档中的节点还是很有用的哦);4. 支持Well-formed 和valid验证,具体而言支持DTD验证,Schema验证功能正在完善中(目前多数解析 器都还不完全支持shema验证功能);5. 支持目前通用的Dom、Sax方式解析等等。Libxml2的在linux下的编译安装: 1. 从xmlsoft站点或ftp()站点下载libxml压缩包(libxml2-xxxx.tar.gz) 2. 对压缩包进行解压缩: tar xvzf libxml2-xxxx.tar.gz 3. 进入解压缩后的文件夹中运行: ./configure & make & make install 即可。 Libxml2的在windows下的编译安装:以libxml2-2.6.30为例,解压后,打开cmd窗口,进入libxml2-2.6.30目录:1. cd win322. cscript configure.js compiler=msvc debug=yes3. nmake /f Makefile.msvc(进入bin.msvc/目录就可以看到生成的库文件:libxml2.dll libxml2.lib libxml2_a.lib libxml2_a_dll.lib)4. nmake install, 因为第二步没有指定prefix,所以这里会在win32目录下生成三个目录include/lib/bin, 将这三个目录copy到vc的相应目录(C:Program FilesMicrosoft Visual StudioVC98)既可以在vc 的工程中直接使用libxml2的头文件和库。使用libxml2生成xml文档头文件:#include libxmlxmlwriter.h#include libxmlencoding.h库文件:libxml2.dll libxml2.lib代码实例:因为我的程序中都是UTF-16编码,所以根据testWriter.c中的ConvertInput函数实现的utf-16到utf8的转换函数:/* * ConvertInput: * in: string in a given encoding * encoding: the encoding used * * Converts UTF-16LEin into UTF-8 for processing with libxml2 APIs * * Returns the converted UTF-8 string, or NULL in case of error. */xmlChar *ConvertInput(const wchar_t *in, const char *encoding) xmlChar *out; int ret; int size; int out_size; int temp; xmlCharEncodingHandlerPtr handler; if ( in = 0 ) return (0); handler = xmlFindCharEncodingHandler(encoding); if ( !handler ) TRACE(ConvertInput: no encoding handler found for %sn, encoding ? encoding : ); return (0); /*size为UTF-16编码的字符串字节数*/ size = (int) (wcslen(in) + 1)* sizeof(wchar_t) ; out_size = size * 2; out = (unsigned char *) xmlMalloc(size_t) out_size); if ( out != 0 ) ret = handler-input(out, &out_size, (const xmlChar *) in, &size); if ( (ret 0) ) TRACE(ConvertInput: conversion wasnt successful.n); xmlFree(out); out = 0; else TRACE(ConvertInput: no memn); return (out);使用xmlWriter APIs写一个xml文档,代码如下: int rc; xmlTextWriterPtr writer; xmlDocPtr doc; xmlChar *tmp; /* 创建一个新的xml Writer,无压缩*/ writer = xmlNewTextWriterDoc(&doc, 0); if (writer = NULL) return; /* 文档声明部分 */ rc = xmlTextWriterStartDocument(writer, NULL, UTF-16, NULL); if (rc 0) return; /* 创建第一个元素EXAMPLE作为文档的根元素. */ rc = xmlTextWriterStartElement(writer, (xmlChar*)EXAMPLE); if (rc 0) return; /* 为EXAMPLE增加一个注释作为子元素,因为xmlTextWriter函数都使用 * UTF-8的编码,所以这里对中文注释做一个编码转换*/ /* 假设wchar_t cmt 指向 这是一个EXAMPLE元素的注释 的UTF-16串*/ tmp = ConvertInput(cmt, UTF-16); rc = xmlTextWriterWriteComment(writer, tmp); if (rc 0) return; /*增加一个新的子元素ORDER*/ rc = xmlTextWriterStartElement(writer, (xmlChar*)ORDER) if (rc 0) return; /*为ORDER增加一个子元素,*/ rc = xmlTextWriterWriteFormatElement(writer, (xmlChar*)NO, %d,20); /*结束子元素ORDER,直接调用下面的函数即可*/ rc = xmlTextWriterEndElement(writer); /*结束元素EXAMPLE*/ rc = xmlTextW
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年舞蹈教育专业统考试题及答案
- 2025年市场调研方法与技巧考试题及答案
- 2025年数字货币与金融科技专业能力测评考试卷及答案
- 2025年全球变暖与适应研究生入学考试卷及答案
- 2025年计算机科学与技术考试真题及答案
- 小学描写诚信的作文12篇
- 乡村夜景400字六年级作文(9篇)
- 五年级数学空间几何与测量教案
- 个人年度收入及税收缴纳情况证明书(6篇)
- 莫高窟文化的魅力传承:初三语文专项课题教学教案
- MSA-测量系统分析模板
- 下肢深静脉血栓试题
- 食品产品认证管理-地理标志产品认证
- 中外动画史笔记
- 2023年山东省春季高考语文模拟卷试题及答案(含答题卡)
- Hirota方法在孤子方程中的应用的中期报告
- 抹灰安全技术操作规程
- 勋章的歌词鹿晗
- 【互联网消费金融行业的风险控制研究-以蚂蚁花呗为例11000字(论文)】
- 2022-2023学年甘肃省酒泉市敦煌市六年级下学期小升初精选数学试卷含答案
- 中国医疗美容机构模块化管理手册
评论
0/150
提交评论