2011-05-14 4 views
0

je un scénario XSLT 2.0 chaîne de transformation (en utilisant Saxonne), comme ceci:
- I1.xml est entrée pour T1.xslt, stylesheet qui construira T2.xslt
- I2. xml est entrée pour T2.xslt, feuille de style qui sortira O1.xml
buiding Dynamiquement une chaîne de requête XPath

Je voudrais avoir une fonction xsl: (pour qu'elle soit disponible dans les expressions XPath), appelons-la mon: f (dataNode, queryString), qui interrogera dataNode en utilisant la requête fournie, similaire à ci-dessous:

<xsl:function name="my:f"> 
     <xsl:param name="dataNode" as="item()*"/> 
     <xsl:param name="query" as="xsd:string"/> 
      <xsl:sequence select="$dataNode/$query"/> 
</xsl:function> 

my: f() est stocké dans un fichier séparé et inclus uniquement par T2. My: f() est isolé dans un fichier car, selon la configuration, il peut appeler une fonction d'extension pour exécuter la requête. Mon appel à f() est, bien sûr, "construire" dans T1 (où la chaîne de requête XPath est dynamiquement concaténée), mais elle n'est en fait appelée que dans T2. Le seul problème que je semble avoir .. est de savoir comment passer réellement la queryString dynamiquement construire de T1 à T2, puis à mon: f() comme une chaîne simple (comme la requête réelle sera effectuée par mon: F()).

Est-ce que quelqu'un a des idées (et idéalement un code) sur la façon d'aborder cela?

Cordialement

Répondre

1

Eh bien, si vous voulez construire et évaluer les expressions XPath à l'exécution, vous devez utiliser une fonction d'extension comme http://www.saxonica.com/documentation/extensions/functions/evaluate.xml: <xsl:sequence select="saxon:evaluate(concat('$p1/', $query), $dataNode)"/>

+2

ou vous pouvez l'écrire comme

+0

Notez que cela suppose que $ query est une expression XPath - cela ne fonctionne pas pour XQuery –

+0

Merci pour vos commentaires, Monsieur! Encore une chose; est évalué() disponible en Saxon 9.3 HE ou seulement PE/EE? – user414366