2009-10-12 15 views
1

Ceci est une suite à une réponse sur un previous question que j'avais à propos de XSLT. Pour récapituler, je ne me suis pas rendu compte que sans EXSLT, XSLT ne vous laisserait pas créer dynamiquement une expression xpath avec des valeurs de chaîne. L'une des solutions de contournement proposées étaitQuelle chaîne d'outils prend en charge la transmission d'un jeu de nœuds à une transformation XSLT en tant que paramètre?

pour interroger le DOM de document d'entrée avant d'exécuter la transformation, et passer l'ensemble de nœuds dans la transformation de

j'utilisais Apache Ant pour faire la transformation, et par the manual sur les paramètres de la tâche xslt/style

Valeur textuelle à insérer dans le paramètre. Était initialement destiné à être une expression XSL.

il semble que Apache Ant ne supporte pas cela. Je me demandais cependant, comment cette sémantique de ce travail dans un système qui a soutenu cela? Ainsi, quels Toolchains ou systèmes supportent le passage d'un nœud à partir du document source dans une transformation en tant que paramètre. Points bonus pour l'exemple de code.

+0

vous avez juste besoin de passer des paramètres à la xslt via ant ou vous voulez passer une partie du fichier de construction en tant que paramètre à la feuille de style xslt? –

Répondre

0

Vous ne pouvez pas passer un ensemble de nœuds en tant que paramètre dans le standard xslt 1.0. Pour ce faire, vous devez utiliser un analyseur xslt 2.0.

Par exemple: http://wiki.apache.org/ant/UsingAntWithXSLT20AndSaxon

+0

Node Set est un type de données valide pour XSLT/XPath 1.0 et vous pouvez les passer en paramètre. Comment faire? Cela dépend du processeur XSLT. –

0

Je ne suis pas complètement sûr de ma réponse car il semble que je ne comprends pas votre question, mais se basant sur le fil que vous faites référence à vos citations je peux venir avec la suggestion suivante :

build.xml:

<?xml version="1.0" encoding="UTF-8"?> 

<project name="Test XSLT" default="test-xslt" basedir="."> 
    <target name="test-xslt"> 
     <xslt in="test.xml" style="ant-with-param.xsl" out="ant-with-param-out.xml"> 
      <param name="param-set-id" expression="2"/> 
     </xslt> 
    </target> 
</project> 

test.xml:

<?xml version="1.0" encoding="UTF-8"?> 

<params> 
    <set id="1"> 
     <param name="name" value="Name from the first set"/> 
    </set> 
    <set id="2"> 
     <param name="name" value="Name from the second set"/> 
    </set> 
</params> 

ant-à-param.xsl:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:exsl="http://exslt.org/common" 
       extension-element-prefixes="exsl"> 
    <xsl:param name="param-set-id"/> 
    <xsl:variable name="param-set" select="//params/set[@id = $param-set-id]"/> 

    <xsl:template match="/"> 
     <name> 
      <xsl:value-of select="exsl:node-set($param-set)//param[@name = 'name']/@value"/> 
     </name> 
    </xsl:template> 
</xsl:stylesheet> 

sortie:

<?xml version="1.0" encoding="UTF-8"?> 
<name>Name from the second set</name> 

feuille de style donnée récupère les paramètres à partir du document d'entrée se basant sur la valeur de la variable transmise depuis le fichier de construction. Les paramètres sont récupérés à l'aide de l'expression XPath du document source et utilisés plus tard à l'aide de la fonction d'extension exsl:node-set(). Par défaut, ant utilise Xalan en tant que processeur xslt. La liste complète de ses extensions peut être trouvée au project's home page.