From afebd79d44b75aed3b38e867c65330ba80ddc0ee Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Tue, 13 Oct 2009 11:29:26 +0200 Subject: Extended the streaming example It now shows how to perform stream-oriented, partially in-memory XML processing using the C++/Tree mapping. --- examples/cxx/tree/streaming/serializer.hxx | 81 ++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 examples/cxx/tree/streaming/serializer.hxx (limited to 'examples/cxx/tree/streaming/serializer.hxx') diff --git a/examples/cxx/tree/streaming/serializer.hxx b/examples/cxx/tree/streaming/serializer.hxx new file mode 100644 index 0000000..6ff0114 --- /dev/null +++ b/examples/cxx/tree/streaming/serializer.hxx @@ -0,0 +1,81 @@ +// file : examples/cxx/tree/streaming/serializer.hxx +// author : Boris Kolpackov +// copyright : not copyrighted - public domain + +#ifndef SERIALIZER_HXX +#define SERIALIZER_HXX + +#include +#include +#include // std::auto_ptr + +#include + +#include + +class serializer_impl; + +class serializer +{ +public: + ~serializer (); + serializer (); + + // Start the serialization process. + // + void + start (std::ostream& is, const std::string& encoding = "UTF-8"); + + // Serialize next object model fragment into an element with the specified + // name. + // + template + void + next (const std::string& name, const T& x); + + // Serialize next object model fragment into an element with the specified + // namespace and qualified name. + // + template + void + next (const std::string& ns, const std::string& name, const T& x); + +private: + serializer (const serializer&); + + serializer& + operator= (const serializer&); + +private: + xercesc::DOMElement* + create (const std::string& name); + + xercesc::DOMElement* + create (const std::string& ns, const std::string& name); + + void + serialize (xercesc::DOMElement&); + +private: + std::auto_ptr impl_; +}; + +template +inline void serializer:: +next (const std::string& name, const T& x) +{ + xsd::cxx::xml::dom::auto_ptr e (create (name)); + *e << x; + serialize (*e); +} + +template +inline void serializer:: +next (const std::string& ns, const std::string& name, const T& x) +{ + xsd::cxx::xml::dom::auto_ptr e (create (ns, name)); + *e << x; + serialize (*e); +} + +#endif // SERIALIZER_HXX -- cgit v1.1