C++中Xerces解析xml文档

          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/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值