一、背景介绍:
Xerces是由Apache组织所推动的一项XML文档解析开源项目,它目前有多种语言版本包括JAVA、C++、PERL、COM等。
而 Xerces C++ 是它的 C++ 语言实现的版本。
二、支持DOM, SAX, or SAX2三种方式:
SAX (Simple API for XML) 和 DOM (Document Object Model) 是当前两个主要的XML API,几乎所有商用的xml 解析器都同时实现了这两个接口。
具体DOM和SAX的区别,参见http://www.sf.org.cn/article/base/200707/20374.html
1. 以SAXParser为例,为了方便使用,继承HandlerBase,并“覆盖”HandlerBase中自己感兴趣的处理函数。
具体例子,可参见http://xerces.apache.org/xerces-c/program-sax-3.html#SAXParser
三、细节:
1. virtual void DocumentHandler::setDocumentLocator(const Locator *const locator)
覆盖此handler,设置Locator ,用于使用Locator 定位出错位置。
2. XMLString::transcode返回值为动态内存,需要XMLString::release释放;
3. 举例,需要自己实现继承自HandlerBase的XmlHandler类
auto_ptr<SAXParser> checkParser( new SAXParser() );
auto_ptr<XmlHandler> checkHandler( new XmlHandler() );
checkParser->setDocumentHandler(checkHandler.get());
checkParser->setErrorHandler(checkHandler.get());
checkParser->setValidationScheme(SAXParser::Val_Always);
checkParser->setDoSchema(true); --- 允许xsd起作用
checkParser->setDoNamespaces(true);
checkParser->setExternalNoNamespaceSchemaLocation(xsdFile.c_str()); -- 还可能指定xsd文件
checkParser->parse(checkingXmlFile.c_str());
// reset the baseclass of this class
HandlerBase::resetDocument();
HandlerBase::resetErrors();
编译:
-lxerces-c