diff options
Diffstat (limited to 'src/read_xml_file_command.h')
-rw-r--r-- | src/read_xml_file_command.h | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/read_xml_file_command.h b/src/read_xml_file_command.h new file mode 100644 index 0000000..96b6c5d --- /dev/null +++ b/src/read_xml_file_command.h @@ -0,0 +1,57 @@ +#include <xalanc/Include/PlatformDefinitions.hpp> +#include <xercesc/util/PlatformUtils.hpp> +#include <xalanc/XalanTransformer/XalanTransformer.hpp> +#include <xalanc/XPath/XObjectFactory.hpp> +#include <xalanc/XPath/Function.hpp> +#include <xalanc/XPath/XObject.hpp> +#include <xalanc/XercesParserLiaison/XercesParserLiaison.hpp> + +#include "utility.h" + +namespace xalan = xalanc_1_11; + +class FunctionReadXmlFile : public xalan::Function { + public: + virtual xalan::XObjectPtr execute( + xalan::XPathExecutionContext& executionContext, + xalan::XalanNode* context, + const xalan::Function::XObjectArgVectorType& args, + const xalan::Locator* locator + ) const { + if ( args.size() != 1 ) { + xalan::XPathExecutionContext::GetAndReleaseCachedString guard( + executionContext + ); + + generalError(executionContext, context, locator); + } + + if ( this->liaison == nullptr ) { + const_cast<FunctionReadXmlFile*>(this)->liaison = new xalan::XercesParserLiaison(); + } + + xalan::XSLTInputSource file(args[0]->str()); + + return executionContext.getXObjectFactory().createNodeSet( + liaison->parseXMLStream(file) + ); + } + + virtual FunctionReadXmlFile* clone(xalan::MemoryManager& manager) const { + return xalan::XalanCopyConstruct(manager, *this); + } + + protected: + xalan::XercesParserLiaison* liaison = nullptr; + + const xalan::XalanDOMString& getError(xalan::XalanDOMString& result) const { + result.assign("The read-file() function expects one argument."); + + return result; + } + + private: + FunctionReadXmlFile& operator=(const FunctionReadXmlFile&); + bool operator==(const FunctionReadXmlFile&) const; + +}; |