aboutsummaryrefslogtreecommitdiff
path: root/src/support/dom/document_cache_item.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/support/dom/document_cache_item.cc')
-rw-r--r--src/support/dom/document_cache_item.cc50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/support/dom/document_cache_item.cc b/src/support/dom/document_cache_item.cc
new file mode 100644
index 0000000..8cc1c24
--- /dev/null
+++ b/src/support/dom/document_cache_item.cc
@@ -0,0 +1,50 @@
+#include "support/dom/document_cache_item.h"
+
+#include <xercesc/dom/DOMImplementation.hpp>
+#include <xercesc/util/XMLString.hpp>
+
+#include "support/xerces_string_guard.h"
+
+namespace InputXSLT {
+
+DomDocumentCache::item::item(const std::string& rootNode):
+ parser_(),
+ dom_support_(parser_),
+ document_(
+ xercesc::DOMImplementation::getImplementation()->createDocument(
+ nullptr,
+ *XercesStringGuard(rootNode),
+ nullptr
+ )
+ ),
+ parsed_source_() { }
+
+DomDocumentCache::item::~item() {
+ this->document_->release();
+}
+
+bool DomDocumentCache::item::isFinalized() const {
+ return static_cast<bool>(this->parsed_source_);
+}
+
+xercesc::DOMDocument* DomDocumentCache::item::getXercesDocument() const {
+ return this->document_;
+}
+
+xalan::XalanDocument* DomDocumentCache::item::getXalanDocument() {
+ if ( this->parsed_source_ ) {
+ return this->parsed_source_->getDocument();
+ } else {
+ this->parsed_source_.reset(
+ new xalan::XercesDOMWrapperParsedSource(
+ document_,
+ parser_,
+ dom_support_
+ )
+ );
+
+ return this->parsed_source_->getDocument();
+ }
+}
+
+}