Apache xerces xml解析器

一、背景介绍:

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

你可能感兴趣的:(Apache xerces xml解析器)