XercesDomWriter.cxx
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "XercesDomWriter.hxx"
00023 #include "XercesEncodings.hxx"
00024 #include "XercesInitializer.hxx"
00025
00026 #include <xercesc/dom/DOMImplementation.hpp>
00027 #include <xercesc/dom/DOMImplementationLS.hpp>
00028 #include <xercesc/dom/DOMImplementationRegistry.hpp>
00029 #include <xercesc/dom/DOMWriter.hpp>
00030 #include <xercesc/framework/MemBufFormatTarget.hpp>
00031 #include <string>
00032 #include <sstream>
00033
00034 namespace CLAM
00035 {
00036 void XercesDomWriter::write(std::ostream & target, xercesc::DOMNode * node)
00037 {
00038 XercesInitializer::require();
00039 const XMLCh * propertyCanonical = xercesc::XMLUni::fgDOMWRTCanonicalForm;
00040 const XMLCh * propertyPrettyPrint = xercesc::XMLUni::fgDOMWRTFormatPrettyPrint;
00041 xercesc::DOMImplementation *impl =
00042 xercesc::DOMImplementationRegistry::getDOMImplementation(U("LS"));
00043 xercesc::DOMWriter *xercesWriter =
00044 ((xercesc::DOMImplementationLS*)impl)->createDOMWriter();
00045
00046 if (xercesWriter->canSetFeature(propertyPrettyPrint, mShouldIndent))
00047 xercesWriter->setFeature(propertyPrettyPrint, mShouldIndent);
00048 if (xercesWriter->canSetFeature(propertyCanonical, mShouldCanonicalize))
00049 xercesWriter->setFeature(propertyCanonical, mShouldCanonicalize);
00050
00051 xercesc::MemBufFormatTarget * xercesTarget = new xercesc::MemBufFormatTarget();
00052 xercesWriter->writeNode(xercesTarget, *node);
00053 const char * buffer = (char *) xercesTarget->getRawBuffer();
00054 const unsigned bufferLen = xercesTarget->getLen();
00055 target << std::string(buffer,bufferLen);
00056 delete xercesWriter;
00057 delete xercesTarget;
00058 }
00059
00060 }
00061