bool serializeDOM(std::ostream& output, bool) { XMLCh tempStr[100]; XMLString::transcode("LS", tempStr, 99); DOMImplementationLS *impl = dynamic_cast<DOMImplementationLS *>(DOMImplementationRegistry::getDOMImplementation(tempStr)); DOMLSSerializer *theSerializer = impl->createLSSerializer(); DOMLSOutput *theOutputDesc = impl->createLSOutput(); bool rc = false; try { MemBufFormatTarget *myFormTarget = new MemBufFormatTarget(); /* do the serialization through DOMLSSerializer::write(); */ theOutputDesc->setByteStream(myFormTarget); theSerializer->write(inputFileDOM, theOutputDesc); const XMLByte * data = myFormTarget->getRawBuffer(); XMLSize_t len = myFormTarget->getLen(); output.write( reinterpret_cast<const char *>(data), len ); delete myFormTarget; rc = true; } catch (IOException& e ) { cerr << StrX(e.getMessage()); cerr << " Code is " << e.getCode(); if ( errno != 0 ) { cerr << ": " << strerror( errno ); } } catch (XMLException& e) { cerr << "An error occurred during creation of output transcoder. Msg is:" << endl << StrX(e.getMessage()); if ( errno != 0 ) { cerr << ": " << strerror( errno ); } cerr << endl; rc = false; } delete theSerializer; return rc; }
int XmlParser::commit(const char* xmlFile) { try { // Obtain DOM implementation supporting Load/Save DOMImplementationLS* pImplementation = dynamic_cast<DOMImplementationLS *>(DOMImplementationRegistry::getDOMImplementation(DualString("LS").asXMLString())); if (pImplementation == NULL){ throw( std::runtime_error( "Unable to obtain suitable DOMImplementation!" ) ) ; } DOMLSSerializer *pSerializer = pImplementation->createLSSerializer(); DOMLSOutput *pOutput = pImplementation->createLSOutput(); #if 1 // Change output format to be pretty (but it isn't) DOMConfiguration *pConfiguration = pSerializer->getDomConfig(); if (pConfiguration->canSetParameter(XMLUni::fgDOMWRTFormatPrettyPrint, true)) pConfiguration->setParameter(XMLUni::fgDOMWRTFormatPrettyPrint, true); #if 0 // Overrides above but seems to have little effect! if (pConfiguration->canSetParameter(XMLUni::fgDOMWRTCanonicalForm, true)) pConfiguration->setParameter(XMLUni::fgDOMWRTCanonicalForm, true); #endif #if 1 // if (pConfiguration->canSetParameter(XMLUni::fgDOMWRTEntities, true)) pConfiguration->setParameter(XMLUni::fgDOMWRTEntities, true); #endif #endif LocalFileFormatTarget *pTarget = new LocalFileFormatTarget(DualString( xmlFile ).asXMLString()); pOutput->setByteStream(pTarget); // mergeDocument->normalizeDocument(); // Needed? pSerializer->write(mergeDocument, pOutput); delete pTarget; pOutput->release(); pSerializer->release(); } catch( const xercesc::XMLException& e ){ return -1; } return 0; }