当前位置: 首页 >> 程序设计 >> xerces-c编码示例
 

xerces-c编码示例

作者:      来源:nbaloverme.cublog.cn     发表时间:2008-03-20     浏览次数:      字号:    



std::string XercesParserXml::get(const std::string& srcBytes, const std::string& node) const
{
    // init
    try {
        XMLPlatformUtils::Initialize();
    }
    catch (const XMLException& toCatch) {
        char* message = XMLString::transcode(toCatch.getMessage());
        std::cout << "Error during initialization! :\n"
             << message << "\n";
        XMLString::release(&message);
        return "";
    }
    // 1. load the right xml bytes from signal tree
    XercesDOMParser* parser = new XercesDOMParser();
    if (NULL == parser) {
        return "";
    }
    parser->setValidationScheme(XercesDOMParser::Val_Always);
    parser->setDoNamespaces(true); // optional
    ErrorHandler* errHandler = (ErrorHandler*) new HandlerBase();
    parser->setErrorHandler(errHandler);
    InputSource* pInputSource = new MemBufInputSource((XMLByte *)srcBytes.c_str(), srcBytes.size(), X("GUID"));
    if (NULL == pInputSource) {
        delete parser;
        delete errHandler;
        return "";
    }
    // 2. parser the xml bytes to a DOM tree
    parser->parse(*pInputSource);
    DOMDocument* doc = parser->getDocument();
    if (NULL == doc) {
        delete parser;
        delete errHandler;
        delete pInputSource;
        return "";
    }
    // 3. find node of parameter in DOM tree
    DOMElement* rootElem = NULL;
    rootElem = doc->getDocumentElement();
    DOMNode* testNode = NULL;
    testNode = getNode(rootElem, node.c_str());
    // get content
    std::string result;
    char* nodeValue = NULL;
    if (testNode) {
        nodeValue = XMLString::transcode(testNode->getTextContent());
        result = nodeValue;
        XMLString::release(&nodeValue);
    }

    // release source
    delete parser;
    delete errHandler;
    delete pInputSource;
    //doc->release();

    return result;
}



bool XercesParserXml::set(std::string& srcBytes, const std::string& node, const std::string& value)
{
    // init
    try {
        XMLPlatformUtils::Initialize();
    }
    catch (const XMLException& toCatch) {
        char* message = XMLString::transcode(toCatch.getMessage());
        std::cout << "Error during initialization! :\n"
             << message << "\n";
        XMLString::release(&message);
        return false;
    }
    // 1. load the right xml bytes from signal tree
    XercesDOMParser* parser = new XercesDOMParser();
    if (NULL == parser) {
        return false;
    }
    parser->setValidationScheme(XercesDOMParser::Val_Always);
    parser->setDoNamespaces(true); // optional
    ErrorHandler* errHandler = (ErrorHandler*) new HandlerBase();
    parser->setErrorHandler(errHandler);
    InputSource* pInputSource = new MemBufInputSource((XMLByte *)srcBytes.c_str(), srcBytes.size(), X("GUID"));
    if (NULL == pInputSource) {
        delete parser;
        delete errHandler;
        return false;
    }
    // 2. parser the xml bytes to a DOM tree
    parser->parse(*pInputSource);
    DOMDocument* doc = parser->getDocument();
    if (NULL == doc) {
        delete parser;
        delete errHandler;
        delete pInputSource;
        return false;
    }
    // 3. find node of parameter in DOM tree
    DOMElement* rootElem = NULL;
    rootElem = doc->getDocumentElement();
    DOMNode* testNode = NULL;
    testNode = getNode(rootElem, node.c_str());
    // 4. set new content
    if (testNode) {
        testNode->setTextContent(X(value.c_str()));
    }

    // 5. serialize DOM tree and save it
    char* result;
    DOMImplementation* impl = DOMImplementationRegistry::getDOMImplementation(X("Core"));
    if (NULL == impl) {
        XERCES_STD_QUALIFIER cerr << "Requested implementation is not supported" << XERCES_STD_QUALIFIER endl;
        XMLPlatformUtils::Terminate();
        delete parser;
        delete errHandler;
        delete pInputSource;
        return false;
    }
    DOMWriter* theSerializer = ((DOMImplementationLS*)impl)->createDOMWriter();
    if (NULL == theSerializer) {
        delete parser;
        delete errHandler;
        delete pInputSource;
        return false;
    }
    if (theSerializer->canSetFeature(XMLUni::fgDOMWRTDiscardDefaultContent, true))
        theSerializer->setFeature(XMLUni::fgDOMWRTDiscardDefaultContent, true);
    if (theSerializer->canSetFeature(XMLUni::fgDOMWRTFormatPrettyPrint, true))
        theSerializer->setFeature(XMLUni::fgDOMWRTFormatPrettyPrint, true);
    XMLCh* unicodeStr = theSerializer->writeToString(*rootElem);
    result = XMLString::transcode(unicodeStr);
    srcBytes = result;
    //printf("result: %s\n", result);
    XMLString::release(&unicodeStr);
    XMLString::release(&result);

    // release source
    theSerializer->release();
    delete parser;
    delete errHandler;
    delete pInputSource;

    return true;
}

[1] [2] [3]

责任编辑 webmaster

 
 
 
 
 
评论更多>>
 
 
 
发表
 
姓名: QQ:
性别: MSN:
E-mail: 主页:
评分: 1 2 3 4 5
评论内容:
验证码:
  
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  •