⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlutils.cpp

📁 BIOSIG is an open source software library for biomedical signal processing. Library works well with
💻 CPP
字号:
/*****************************************************************************   File:       XMLUtils.cpp*   Author:     S. Skorokhodov**   Description:*       Singleton wrapper class for Xerces-C/Xalan-C for biosig4c++ library.       ******************************************************************************/#include <iostream>#include <cassert>#include <memory>#include <string>//---------------------------------------------------------------------------#include <boost/smart_ptr.hpp>//---------------------------------------------------------------------------//  Xerces includes#include <xercesc/dom/DOM.hpp>#include <xercesc/framework/StdOutFormatTarget.hpp>//  XQilla includes#include <xqilla/xqilla-dom3.hpp>//---------------------------------------------------------------------------#include "XMLUtils.h"//---------------------------------------------------------------------------XERCES_CPP_NAMESPACE_USE;//---------------------------------------------------------------------------namespace BioSig{//===========================================================================//  Private methods of class aECGXMLUtils//===========================================================================void aECGXMLUtils::init_(){    XQillaPlatformUtils::initialize();    pdomimpl_   =   DOMImplementationRegistry::getDOMImplementation(X("XPath2 3.0"));    if ( !pdomimpl_ ) throw aECGXMLUtils::xml_err();    pparser_    =   pdomimpl_->createDOMBuilder(DOMImplementationLS::MODE_SYNCHRONOUS, 0);    pparser_->setFeature(X("namespaces"), true);    pparser_->setFeature(X("http://apache.org/xml/features/validation/schema"), false);    pparser_->setFeature(X("validation"), false);}//---------------------------------------------------------------------------void aECGXMLUtils::clean_up_doc_(){    if ( presolver_ )    {        presolver_->release();        presolver_  =   0;    }    if ( pdoc_ )    {        pdoc_->release();        pdoc_       =   0;    }}//---------------------------------------------------------------------------void aECGXMLUtils::do_parse_uri_( const char *uri ){    assert( pparser_ );    pdoc_           =   pparser_->parseURI( uri );    if ( pdoc_ )    {        presolver_  =   (XQillaNSResolver*)pdoc_->createNSResolver(pdoc_->getDocumentElement());        //  add prefix for default namespace        presolver_->addNamespaceBinding(X("hl7"), X("urn:hl7-org:v3"));    }}//---------------------------------------------------------------------------XPath2Result *aECGXMLUtils::do_select_node_iterator_( const char *pexpr, DOMNode *pcontext ){    assert( pexpr );    assert( pdoc_ );    assert( presolver_ );    DOMNode *actual_context =   pcontext ? pcontext : pdoc_->getDocumentElement();    const DOMXPathExpression*        parsed_expr         =   pdoc_->createExpression( X(pexpr), presolver_ );    return (XPath2Result*)parsed_expr->evaluate(    actual_context,                                                    XPath2Result::ITERATOR_RESULT,                                                    0   );}//===========================================================================//  class aECGXMLUtils public interface//===========================================================================aECGXMLUtils::aECGXMLUtils() : pdomimpl_(0), pparser_(0), pdoc_(0), presolver_(0){    try    {        init_();    }    catch ( const XMLException& e )    {        (void)e;        throw xml_err();    }    catch ( const DOMException &e )    {        (void)e;        throw dom_err();    }    catch ( const DOMXPathException &e )    {        (void)e;        throw xpath_err();    }    catch ( ... )    {        throw unexp_err();    }}//---------------------------------------------------------------------------aECGXMLUtils::~aECGXMLUtils(){     XQillaPlatformUtils::terminate();;}//---------------------------------------------------------------------------XERCES_CPP_NAMESPACE::DOMBuilder *aECGXMLUtils::getCompatableParser(){    return pparser_;}//---------------------------------------------------------------------------void aECGXMLUtils::parseURI( const char *uri ){    try    {        clean_up_doc_();        do_parse_uri_( uri );    }    catch ( const XMLException& e )    {        (void)e;        clean_up_doc_();        throw xml_err();    }    catch ( const DOMException &e )    {        (void)e;        clean_up_doc_();        throw dom_err();    }    catch ( const DOMXPathException &e )    {        (void)e;        clean_up_doc_();        throw xpath_err();    }    catch ( ... )    {        clean_up_doc_();        throw unexp_err();    }}//---------------------------------------------------------------------------void aECGXMLUtils::detachDoc(){    clean_up_doc_();}//---------------------------------------------------------------------------DOMDocument *aECGXMLUtils::getParsedDoc( const char *uri ){    if ( !(pdoc_ && presolver_) )        throw no_doc();    return pdoc_;}//---------------------------------------------------------------------------XQillaNSResolver *aECGXMLUtils::getCompatableNSResolver(){    if ( !(pdoc_ && presolver_) )        throw no_doc();    return presolver_;}//---------------------------------------------------------------------------DOMImplementation *aECGXMLUtils::getCompatableImplementation(){    assert( pdomimpl_ );    return pdomimpl_;}//---------------------------------------------------------------------------XPath2Result *aECGXMLUtils::selectNodeSet( const char *pexpr, DOMNode *pcontext ){    if ( !(pdoc_ && presolver_) )        throw no_doc();    XPath2Result *pres  =   0;    try    {        pres            =   do_select_node_iterator_( pexpr, pcontext );    }    catch ( const XMLException& e )    {        (void)e;    }    catch ( const DOMException &e )    {        (void)e;    }    catch ( const DOMXPathException &e )    {        (void)e;    }    catch ( ... )    {    }    return pres;}//===========================================================================//  aECGXML singleton//===========================================================================aECGXMLUtils *aECGXML::instance(){    static boost::scoped_ptr<aECGXMLUtils> apinstance(0);    if ( apinstance.get() == NULL )    {        apinstance.reset( new aECGXMLUtils );    }    return apinstance.get();}//---------------------------------------------------------------------------}   //  namespace BioSig//---------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -