From: Scott Cantor Date: Thu, 16 Nov 2006 19:45:03 +0000 (+0000) Subject: Function to serialize to stream. X-Git-Tag: 1.0-alpha1~151 X-Git-Url: http://www.project-moonshot.org/gitweb/?a=commitdiff_plain;ds=sidebyside;h=182a2e2532ea6def91151a4610660c430981c2e5;p=shibboleth%2Fcpp-xmltooling.git Function to serialize to stream. --- diff --git a/xmltooling/util/XMLHelper.cpp b/xmltooling/util/XMLHelper.cpp index c876e97..d6506a0 100644 --- a/xmltooling/util/XMLHelper.cpp +++ b/xmltooling/util/XMLHelper.cpp @@ -227,3 +227,36 @@ void XMLHelper::serialize(const DOMElement* e, std::string& buf) buf.erase(); buf.append(reinterpret_cast(target.getRawBuffer()),target.getLen()); } + +namespace { + class StreamFormatTarget : public XMLFormatTarget + { + public: + StreamFormatTarget(std::ostream& out) : m_out(out) {} + ~StreamFormatTarget() {} + + void writeChars(const XMLByte *const toWrite, const unsigned int count, XMLFormatter *const formatter) { + m_out.write(reinterpret_cast(toWrite),count); + } + + void flush() { + m_out.flush(); + } + + private: + std::ostream& m_out; + }; +}; + +void XMLHelper::serialize(const DOMElement* e, std::ostream& out) +{ + static const XMLCh impltype[] = { chLatin_L, chLatin_S, chNull }; + static const XMLCh UTF8[]={ chLatin_U, chLatin_T, chLatin_F, chDigit_8, chNull }; + DOMImplementation* impl=DOMImplementationRegistry::getDOMImplementation(impltype); + DOMWriter* serializer=(static_cast(impl))->createDOMWriter(); + XercesJanitor janitor(serializer); + serializer->setEncoding(UTF8); + StreamFormatTarget target(out); + if (!serializer->writeNode(&target,*e)) + throw XMLParserException("unable to serialize XML"); +} diff --git a/xmltooling/util/XMLHelper.h b/xmltooling/util/XMLHelper.h index 868d00f..c09d3d9 100644 --- a/xmltooling/util/XMLHelper.h +++ b/xmltooling/util/XMLHelper.h @@ -26,6 +26,8 @@ #include #include +#include + using namespace xercesc; namespace xmltooling { @@ -219,6 +221,15 @@ namespace xmltooling { * @param buf buffer to serialize element into */ static void serialize(const DOMElement* e, std::string& buf); + + /** + * Serializes the DOM Element provided to a stream using UTF-8 encoding and + * the default XML serializer available. No manipulation or formatting is applied. + * + * @param e element to serialize + * @param out stream to serialize element into + */ + static void serialize(const DOMElement* e, std::ostream& out); }; };