#ifndef anna_xml_DocumentMemory_hpp
#define anna_xml_DocumentMemory_hpp
+#include <anna/config/defines.hpp>
#include <anna/xml/Document.hpp>
+#include <anna/xml/Compiler.hpp>
namespace anna {
/**
Constructor.
*/
- DocumentMemory() {;}
+ DocumentMemory() : a_rootNode(NULL) {;}
+
+ /**
+ * Root node after parsing, or NULL if not analyzed by mean parse()
+ *
+ * @return XML document root node
+ */
+ const Node * getRootNode() const { return a_rootNode; }
+
+ /**
+ * Parse xml document and return root node
+ * \return Root node
+ * \warning Need previous initialization
+ */
+ const Node* parse() noexcept(false) { return (a_rootNode = Document::parse()); }
+
+ /**
+ * Parse xml document with dtd and return root node
+ * \param dtd Validation DTD for XML document
+ * \return Root node
+ * \warning Need previous initialization
+ */
+ const Node* parse(const DTD& dtd) noexcept(false) { return (a_rootNode = Document::parse(dtd)); }
+
+ /**
+ * XML representation from loaded document
+ * \return XML string
+ * \warning Need previous initialization and parsing
+ */
+ std::string asXmlString() const { Compiler c; return (c.apply(a_rootNode)); }
private:
- virtual _xmlDoc* do_initialize(const char* content) throw(RuntimeException);
- virtual _xmlDoc* do_initialize(const anna::DataBlock& content) throw(RuntimeException);
+ const anna::xml::Node * a_rootNode;
+ virtual _xmlDoc* do_initialize(const char* content) noexcept(false);
+ virtual _xmlDoc* do_initialize(const anna::DataBlock&) noexcept(false);
};
}