From e9c4e2b716798002c9ccbf96ee509eb91ad56553 Mon Sep 17 00:00:00 2001 From: Adrian Kummerländer Date: Thu, 1 May 2014 18:14:33 +0200 Subject: Added basic parameter taking overload of TransformationFacade::generate * XSLT stylesheets may be provided with a set of initial parameters ** these parameters can be provided as the second argument to the generate member method in the form of a string to string mapping ** the XSLT standard also permitts number and node set types as value arguments of such input parameters but this is not supported by this change * expanded test transformation to demonstrate this feature --- dummy/transform.xsl | 6 ++++++ src/transformation_facade.cc | 19 +++++++++++++++++++ src/transformation_facade.h | 4 ++++ test.cc | 4 +++- 4 files changed, 32 insertions(+), 1 deletion(-) diff --git a/dummy/transform.xsl b/dummy/transform.xsl index c955a85..5e172b6 100644 --- a/dummy/transform.xsl +++ b/dummy/transform.xsl @@ -15,11 +15,17 @@ indent="yes" /> + + +
+ Parameter "test" contains value "" +
+
diff --git a/src/transformation_facade.cc b/src/transformation_facade.cc index 846c586..3fee24f 100644 --- a/src/transformation_facade.cc +++ b/src/transformation_facade.cc @@ -55,6 +55,7 @@ int TransformationFacade::generate(const std::string& target) { xalan::XSLTInputSource inputSource(emptyStream); xalan::XSLTResultTarget outputTarget(target.data()); + const int resultCode = this->transformer_.transform( inputSource, this->transformation_, @@ -68,4 +69,22 @@ int TransformationFacade::generate(const std::string& target) { return resultCode; } +int TransformationFacade::generate( + const std::string& target, + const parameter_map& parameters +) { + for ( auto&& parameter : parameters ) { + this->transformer_.setStylesheetParam( + parameter.first.data(), + parameter.second.data() + ); + } + + const int resultCode = this->generate(target); + + this->transformer_.clearStylesheetParams(); + + return resultCode; +} + } diff --git a/src/transformation_facade.h b/src/transformation_facade.h index 765a376..880335f 100644 --- a/src/transformation_facade.h +++ b/src/transformation_facade.h @@ -4,6 +4,7 @@ #include #include +#include #include "common.h" #include "support/filesystem_context.h" @@ -12,10 +13,13 @@ namespace InputXSLT { class TransformationFacade { public: + typedef std::unordered_map parameter_map; + TransformationFacade(const std::string&); ~TransformationFacade(); int generate(const std::string&); + int generate(const std::string&, const parameter_map&); private: const FilesystemContext fs_context_; diff --git a/test.cc b/test.cc index f15e1f6..2a6f886 100644 --- a/test.cc +++ b/test.cc @@ -5,5 +5,7 @@ int main() { InputXSLT::PlattformGuard plattform; InputXSLT::TransformationFacade transformation("../dummy/transform.xsl"); - return transformation.generate("out.xml"); + return transformation.generate("out.xml", { + {"test", "42"} + }); } -- cgit v1.2.3