成语大全网 - 成语词典 - 如何利用Xerces C 解析包含中文字符的XML文

如何利用Xerces C 解析包含中文字符的XML文

解析包含中文字符的XML 如何利用XercesC++解析包含中文字符的XML 文档 下载本文 示例代码 Xerces-C++

是目前广泛使用的XML 解析器,在利用它编写 XML 应用以处理包含中文字符的XML 文档时会出现字符编码错

误,如何正确解决这个问题,对于我们开发XML 的应用程序非常 有用。本文给出了正确处理的方法和实现类的代码,希望能对大 家有所帮助。

1.背景介绍 随着XML 技术的普及应用,我 国的各行各业有可能会生成大量的包含中文字符 的XML 文档。尽管基于Java 技术的XML

Parser 能较好处理这些XML 文档,但 是,它不能解决所有的问题,原因是应用开发的复杂性,尤其在我国更为明

显.我们知道,企业的许多应用系统的开发 采用了C、C++、VB、Delphi、 FoxPro 等等语言,这些应用不可能用Java 语言重新实现,那么,问题就出现 了,如何让这些应用也能处理 XML 文档,甚至是包含中文字符的XML 文档呢? 目前有关XML Parser C++语言的实现,非常著名的有Apache 组织的 Xerces 和IBM 的XML4C。Aparche 的Xerces 来源于IBM 的XML4C,

所以,它 的编程接口是一致的。二者关键的不同在于字符编码。Apache的Xerces1.6 前只支持少数的字符编码,如ASCII,UTF-8,

UTF-16, UCS4, EBCDIC IBM037 IBM1140,ISO-8859-1 和Windows-1252。因而,采用Apache

的Xerces ++解析器不能处理包含中文字符的XML文档。IBM 的XML4C 支持多达100 字符编码,它将Xerces和International Components Unicode(ICU)结 合了起来。因而,我们可以选用 XML4C 作为 XML 的解析器。在使用 XML4C 之前, 我们需要首先确认XML4C 的bin 目录是否包含在系统 的Path 之中,bin 目录 必须要有这些dll:xerces-c_1_6_0D.dll,icudt20.dll,icuuc20.dll, icuuc20d.dll。 问题描述在XML4C 应用过程中,我 发现调用XML4C

提供的一些API 并不能很好解决中文 问题。如解析XML 时生成DOM_Document, 并利用DOM 方法得到某一DOM_Node

节点时,为了获得DOM_Node 的名字或值,需要调用DOM_Node

getNodeName()或getNodeValue()方法,并得到DOMString 对象。根据API

档描述,DOMString类的transcode()方法,返回字符串 的拷贝,并依照本 地代码页对此字符串进行编码处理。因而,我在解析图1

的XML 文档并试图获 得"爱国的人们"节点的名字时,transcode 方法返回不 完整的节点名"爱国",

而不是完整的"爱国的人们",这样,我们就无法利用这些信息来进行字符串比 较等等操作,XML 的处理就会出现问题。因 而,DOMString

的transcode 方法 并不能处理XML 的中文字符。 class StrFormatTarget publicXMLFormatTarget public:char GetResult();StrFormatTarget() XML文档的编码定义由文档头 #include