2010-10-27 38 views
4

J'ai un tas de fichiers XML que j'utilise pour générer des pages HTML. Ces pages finissent par être balisées (à la main) avec quelques balises <%= %> et transformées en modèles Ruby .erb.Comment créer des tags PHP/JSP/ERB en utilisant XSLT?

Existe-t-il un moyen de générer les balises spéciales <?php ?> ou <%= %> directement pendant la transformation XSL?

J'ai essayé d'utiliser un bloc <![CDATA[ ... ]]>, mais la sortie génère avec &lt; et &gt; au lieu de < et >.

+0

Bonne question, +1. Voir ma réponse pour l'explication et un exemple complet comment faire ceci. –

Répondre

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

<?php ?> n'est pas une "étiquette spéciale" - ce qui est d'un type de nœud standard dans le modèle de données XPath - un processing instruction.

il y a aussi une instruction XSLT pour créer un PI:

<xsl:processing-instruction>

Enfin, vous pouvez créer un texte comme "<% =%>" si vous utilisez le textesortie méthode:

<xsl:output method="text"/> 

mais dans le texte méthode de sortie vous loseany noeud - vous devez entrer chaque caractère de sortie en tant que texte.

Ainsi, il est un peu peu plus facile à utiliser la méthode de sortie par défaut xml et l'attribut (! Non obligatoire) disable-output-escaping="yes" si cela est pris en charge par votre processeur XSLT.

Voici un exemple:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<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> 

application de cette transformation à tout document XML (non utilisé) produit:

<?php?> 
    <% Hello World! %> 
+0

+1 Réponse très complète! –

+0

Excellent, merci, cela fait l'affaire! J'utilise Javascript pour transformer avec 'ActiveXObject (" Microsoft.XMLDOM ")' et 'ActiveXObject (" Scripting.FileSystemObject ")' et il semble supporter la directive 'disable-output-escaping =" yes "'. :) – Dave

+0

@Dave: Vous êtes les bienvenus. :) –