残念ながら、XERCESC 2.7 を使用していますが、このトピックについては Web 上であまり取り上げられていません。
質問: Xerces でパースするときのワークフローは? 私が持っているワークフローを示します。うまくいけば、私のメモリリークが誰かによって発見されるでしょう。残念ながら、制限により、システムにメモリ デバッガーをインストールできません。
ありがとうOS
コンストラクタ:
DOMBuilder * pDOMBuilder
pDOMBuilder =_pDOMImplementation->createDOMBuilder
(xercesc::DOMImplementationLS::MODE_SYNCHRONOUS, NULL);
pDOMBuilder->setFeature(XMLUni::fgXercesUserAdoptsDOMDocument, true)
pDOMBuilder->setFeature(xercesc::XMLUni::fgDOMNamespaces, true);
pDOMBuilder->setFeature(xercesc::XMLUni::fgDOMValidation, true);
pDOMBuilder->setFeature(xercesc::XMLUni::fgXercesSchema, true);
pDOMBuilder->setFeature(xercesc::XMLUni::fgXercesSchemaFullChecking, true);
pDOMBuilder->setFeature(xercesc::XMLUni::fgXercesValidationErrorAsFatal, true);
pDOMBuilder->setFeature(xercesc::XMLUni::fgDOMWhitespaceInElementContent, false);
pDOMBuilder->setFeature(xercesc::XMLUni::fgDOMDatatypeNormalization, true);
m_pErrorHandler = new ErrorHandler();
pDOMBuilder->setErrorHandler(m_pErrorHandler);
pDOMBuilder->setEntityResolver(new EntityResolver(absolutePathToSchemas));
デストラクタ:
pDOMWriter->release();
オブジェクトの使用法:
pDOMBuilder->resetDocumentPool();
pDOMBuilder->resetCachedGrammarPool();
m_ErrorHandler->reset();
xercesc::MemBufInputSource * pMemBufInputSource = new xercesc::MemBufInputSource((const XMLByte *)xmlStream,
(unsigned int)strlen(xmlStream),
UnicodeString("xmlStream"));
xercesc::Wrapper4InputSource wrapper4InputSource(pMemBufInputSource);
xercesc::DOMDocument * resultDoc = m_DOMBuilder->parse(wrapper4InputSource);
resultDoc->release();