tags:

views:

20

answers:

1

I have a bunch of XML files which I use to generate HTML pages. Those pages ultimately get marked up (by hand) with some <%= %> tags and made into Ruby .erb templates.

Is there a way to generate the special tags <?php ?> or <%= %> directly during the XSL transform?

I've tried using a <![CDATA[ ... ]]> block, but then the output generates with &lt; and &gt; instead of < and >.

+2  A: 
Is there a way to generate the special tags <?php ?> or <%= %> directly during the XSL transform?

<?php ?> is not a "special tag" -- this is of a standard node type in the XPath data model -- a processing instruction.

there is also an XSLT instruction to create a PI:

<xsl:processing-instruction>

Finally, you can create text like "<%= %>" if you use the text output method:

<xsl:output method="text"/>

but in the text output method you loseany node -- you should enter every output character as text.

So, it is a little-bit more convenient to use the default xml output method and the (non-mandatory!) attribute disable-output-escaping="yes" if this is supported by your XSLT processor.

Here is an example:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&gt;
 <xsl:output omit-xml-declaration="yes"/>

 <xsl:template match="/">
   <xsl:processing-instruction name="php"/>
   <xsl:text disable-output-escaping="yes">
     &lt;% Hello World! %>
   </xsl:text>
 </xsl:template>
</xsl:stylesheet>

applying this transformation to any XML document (not used) produces:

<?php?>
     <% Hello World! %>
Dimitre Novatchev
+1 Very complete answer!
Alejandro
Excellent, thanks, this does the trick! I'm using Javascript to transform with `ActiveXObject("Microsoft.XMLDOM")` and `ActiveXObject("Scripting.FileSystemObject")` and it seems to support the `disable-output-escaping="yes"` directive. :)
Dave
@Dave: You are welcome. :)
Dimitre Novatchev