#include #include #include #include #include #include #include #include "utility.h" #include namespace InputXSLT { class FunctionReadXmlFile : public xalan::Function { public: virtual xalan::XObjectPtr execute( xalan::XPathExecutionContext& executionContext, xalan::XalanNode* context, const xalan::Function::XObjectArgVectorType& arguments, const xalan::Locator* locator ) const { if ( arguments.size() != 1 ) { xalan::XPathExecutionContext::GetAndReleaseCachedString guard( executionContext ); generalError(executionContext, context, locator); } if ( !this->parser_ ) { this->parser_ = std::make_shared(); } return executionContext.getXObjectFactory().createNodeSet( this->parser_->parseXMLStream( xalan::XSLTInputSource(arguments[0]->str()) ) ); } virtual FunctionReadXmlFile* clone(xalan::MemoryManager& manager) const { return xalan::XalanCopyConstruct(manager, *this); } FunctionReadXmlFile& operator=(const FunctionReadXmlFile&) = delete; bool operator==(const FunctionReadXmlFile&) const = delete; private: mutable std::shared_ptr parser_; const xalan::XalanDOMString& getError(xalan::XalanDOMString& result) const { result.assign("The read-xml-file() function expects one argument."); return result; } }; }