From 57fe13de5c01bc8e5bbeb39acd131c9329245261 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Fri, 4 Jul 2014 11:15:44 +0200 Subject: Update streaming example with new implementation --- examples/cxx/tree/streaming/parser.hxx | 46 +++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 12 deletions(-) (limited to 'examples/cxx/tree/streaming/parser.hxx') diff --git a/examples/cxx/tree/streaming/parser.hxx b/examples/cxx/tree/streaming/parser.hxx index a9c53ba..cb34f92 100644 --- a/examples/cxx/tree/streaming/parser.hxx +++ b/examples/cxx/tree/streaming/parser.hxx @@ -1,12 +1,10 @@ -// file : examples/cxx/tree/streaming/parser.hxx -// copyright : not copyrighted - public domain - #ifndef PARSER_HXX #define PARSER_HXX #include #include -#include // std::auto_ptr +#include // std::size_t +#include // std::auto_ptr #include @@ -17,20 +15,44 @@ class parser_impl; class parser { public: + // We can specify embedded XML Schema grammar to be used by the parser + // that was created by the xsdbin utility from the 'embedded' example. + // + parser (const XMLByte* grammar = 0, std::size_t grammar_size = 0); ~parser (); - parser (); - // The start function returns a "carcase" of the complete document. That - // is, the root element with all the attributes but without any content. + // The start function prepares everything for parsing a new document. // - xsd::cxx::xml::dom::auto_ptr + void start (std::istream& is, const std::string& id, bool validate); - // The next function returns next first-level element with all its - // attributes and content or 0 if no more available. + typedef xsd::cxx::xml::dom::auto_ptr document_ptr; + + // The peek function parses just the next element (ignoring any + // preceding content assuming it is whitespace) without parsing + // any of its nested content (but it includes the element's + // attributes). It returns NULL if there are no more elements + // at this level (there could still be on outer levels in case + // of nested streaming). + // + document_ptr + peek (); + + // The next function parses (or finishes parsing after peek) the + // next element including its nested content. It returns NULL if + // there are no more elements at this level (there could still + // be on outer levels in case of nested streaming). + // + // If doc is not NULL, then it should be the document returned + // by peek(). That is, a document with only the root element. + // In this case next() finishes parsing this element. + // + // If outer_doc is not NULL, then next() will first add doc to + // outer_doc as a child of the document root. // - xsd::cxx::xml::dom::auto_ptr - next (); + document_ptr + next (document_ptr doc = document_ptr (), + document_ptr outer_doc = document_ptr ()); private: parser (const parser&); -- cgit v1.1