Xerces-C++的前身是IBM的XML4C 项目。XML4C和XML4J是两个并列的项目,而XML4J是Xerces-J——Java 实现——的前身。IBM将这两个项目的源代码让与Apache软件基金会(Apache Software Foundation),他们将其分别改名为Xerces-C++和Xerces-J。这两个项目是Apache XML组的核心项目(如果看到的是“Xerces-C”而不是“Xerces-C++”,也是同一个东西,因为这个项目一开始就是用C。
Xerces-C++功能介绍: Xerces-C++是一个非常健壮的XML解析器,其提供的两种解析XML文档的方法,DOM和SAX(我是采用DOM方法)。SAX是一个面向事件的编程API.一个解析引擎消耗XML序列数据,并在发现进来的XML数据的结构时回调应用程序,这些回调称为事件句柄. 与SAX不同,它允许对XML文档进行编辑并保存为一个文件或者流,还允许以编程的方式构建一个XML文档.DOM提供了一个内存中的模型,你可以遍历文 档树,删除节点或者嫁接新节点.与解析的SAX事件不同,DOM事件反映出用户与文档的互动以及使用文档的改变.
总的来说,SAX是按行遍历XML文档的,而DOM是先把XML文档生成树,然后遍历DOM树,来解析每个节点.
下面是我写的一个小例子:
//xerces include
#include <xercesc/util/PlatformUtils.hpp>
#include <xercesc/dom/DOM.hpp>
#include <xercesc/parsers/XercesDOMParser.hpp>
#pragma comment(lib, "xerces-c_3.lib")
using namespace XERCES_CPP_NAMESPACE;
//c/c++ include
#include "stdio.h"
#include <iostream>
using namespace std ;
DOMNode* fn(DOMNode * pCursor) ;
int main()
{
try
{
XMLPlatformUtils::Initialize();
}
catch ( ... )
{
XMLPlatformUtils::Terminate();
}
XercesDOMParser* parser = new XercesDOMParser;
//解析XML
parser->parse("setup.xml");
//获取树形结构
DOMDocument* pDoc = parser->getDocument();
DOMElement* rootNode = pDoc->getDocumentElement();
//遍历属性结构
//char * strValue = XMLString::transcode(rootNode->getNodeName()) ;
//cout << strValue << endl ;
//XMLString::release(&strValue) ;
//DOMNode * pCursor = rootNode->getFirstChild() ;
fn(rootNode->getFirstChild()) ;
delete parser;
parser = NULL;
return 0;
}
DOMNode* fn(DOMNode * pCursor)
{
while ( pCursor != NULL)
{
if ( pCursor->getNodeType() == DOMNode::ELEMENT_NODE )
{
DOMElement* pDepartment = (DOMElement *)pCursor;
char* strValue = XMLString::transcode(pDepartment->getNodeName()) ;
cout << strValue << endl ;
XMLString::release(&strValue) ;
}
pCursor = pCursor->getNextSibling();
}
return pCursor ;
}
上面只是一个很简单的应用实例,更详细的使用资料请参考 http://xerces.apache.org/xerces-c/