如何利用xerces c解析包含中文字符的xml文

如何利用xerces c解析包含中文字符的xml文

ID:9265998

大小:34.39 KB

页数:7页

时间:2018-04-25

如何利用xerces c解析包含中文字符的xml文_第1页
如何利用xerces c解析包含中文字符的xml文_第2页
如何利用xerces c解析包含中文字符的xml文_第3页
如何利用xerces c解析包含中文字符的xml文_第4页
如何利用xerces c解析包含中文字符的xml文_第5页
资源描述:

《如何利用xerces c解析包含中文字符的xml文》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、如何利用XercesC解析包含中文字符的XML文如何利用XercesC++解析包含中文字符的XML文档下载本文示例代码Xerces-C++是目前广泛使用的XML解析器,在利用它编写XML应用以处理包含中文字符的XML文档时会出现字符编码错误,如何正确解决这个问题,对于我们开发XML的应用程序非常有用。本文给出了正确处理的方法和实现类的代码,希望能对大家有所帮助。1.背景介绍随着XML技术的普及应用,我国的各行各业有可能会生成大量的包含中文字符的XML文档。尽管基于Java技术的XMLParser能较好处理这些X

2、ML文档,但是,它不能解决所有的问题,原因是应用开发的复杂性,尤其在我国更为明显.我们知道,企业的许多应用系统的开发采用了C、C++、VB、Delphi、FoxPro等等语言,这些应用不可能用Java语言重新实现,那么,问题就出现了,如何让这些应用也能处理XML文档,甚至是包含中文字符的XML文档呢?目前有关XMLParserC++语言的实现,非常著名的有Apache组织的Xerces和IBM的XML4C。Aparche的Xerces来源于IBM的XML4C,所以,它们的编程接口是一致的。二者关键的不同在于字符

3、编码。Apache的Xerces1.6目前只支持少数的字符编码,如ASCII,UTF-8,UTF-16,UCS4,EBCDICIBM037和IBM1140,ISO-8859-1和Windows-1252。因而,采用Apache的XercesC++解析器不能处理包含中文字符的XML文档。IBM的XML4C支持多达100种字符编码,它将Xerces和InternationalComponentsforUnicode(ICU)结合了起来。因而,我们可以选用XML4C作为XML的解析器。在使用XML4C之前,我们需要首

4、先确认XML4C的bin目录是否包含在系统的Path之中,bin目录必须要有这些dll:xerces-c_1_6_0D.dll,icudt20.dll,icuuc20.dll,icuuc20d.dll。2.问题描述在XML4C应用过程中,我发现调用XML4C提供的一些API并不能很好解决中文问题。如解析XML时生成DOM_Document,并利用DOM方法得到某一DOM_Node节点时,为了获得DOM_Node的名字或值,需要调用DOM_Node类的getNodeName()或getNodeValue()方法,

5、并得到DOMString对象。根据API文档描述,DOMString类的transcode()方法,返回字符串的拷贝,并依照本地代码页对此字符串进行编码处理。因而,我在解析图1的XML文档并试图获得"爱国的人们"节点的名字时,transcode方法返回不完整的节点名"爱国",而不是完整的"爱国的人们",这样,我们就无法利用这些信息来进行字符串比较等等操作,XML的处理就会出现问题。因而,DOMString的transcode方法并不能处理XML的中文字符。

6、GB2312'?>……<爱国的人们>…………图13.解决的方法针对这种情况,我仔细分析了XML4C提供的DOMPrint例子,此例子能顺利解析含中文字符的XML文档,并能打印出XML解析后生成的DOM_Document。它利用了Xerces的XMLFormatter和XMLFormatTarget类:·XMLFormatter类,提供基本的格式化字符串功能,将解析器生成的基于Unicode的XML数据转换为非Unicode环境中使用的数据,如本地字符编码等;·XMLFormatTarget类,为

7、XMLFormatter格式化字符串提供目的地,它需要派生,并利用它的writeChars()方法得到格式化后的字符串。基于以上分析,我改进了DOMPrint的例子程序,实现了一个XMLFormatTarget类的子类,代码如下://类定义#includeclassStrFormatTarget:publicXMLFormatTarget{public:char*GetResult();StrFormatTarget(){};~StrFormatTarge

8、t(){};voidwriteChars(constXMLByte*consttoWrite,constunsignedintcount,XMLFormatter*constformatter);private:char*buffer;StrFormatTarget(constStrFormatTarget&other);voidoperator=(constStrFormatTarg

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。