Re: [xsl] Structuring templates

Subject: Re: [xsl] Structuring templates
From: "Martin Honnen martin.honnen@xxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Fri, 1 Sep 2017 16:46:23 -0000
On 01.09.2017 18:16, Joseph L. Casale jcasale@xxxxxxxxxxxxxxxxx wrote:
I am trying to split up a few large xsl templates where one contains a
large block of msxsl:script based C# functions. Almost all of the templates
use some quantity of the functions made available through this facility
as well as some quantity of shared variables for data like apostrophes,
quotes and some common names.

Ultimately I want most of the templates in their own file, I intend to import
these in a single file for my primary use case but use them individually where
needed. Using import and include where it makes sense, this works fine for the
variable template but not for the C# functions. I seem to only be able to import
the template which defines the C# functions in just one file. Obviously that only
works if I place the C# import in the final template which imports everything but
that makes the individual templates useless.

The c# file resembles:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
                 exclude-result-prefixes="msxsl csharp">

   <msxsl:script language="C#" implements-prefix="csharp">
     <![CDATA[ ... ]]>


The other templates have the same namespace structure. How can I make the
C# functions available in each template so they are usable on their own?

Are you aware that XslCompiledTransform supports extension objects as well as inline code? If you encapsulate your C# code in a class and pass that as an extension object with e.g. when you run XSLT then you don't depend on inline script compilation and execution and I think it should also solve the problem you have with sharing the C# code.

Obviously that way you need to write and compile the C# separately instead of having XslCompiledTransform doing it for the inline code, I am not sure whether it is an option.

Current Thread