Créer de l'ensemble de nœuds et de passer comme paramètre
À l'aide de XSLT 1.0, je suis en train de créer un petit jeu de nœud et de le passer en paramètre à un modèle, quelque chose comme ce qui suit:
<xsl:call-template name="widget">
<xsl:with-param name="flags">
<items>
<item>widget.recent-posts.trim-length=100</item>
<item>widget.recent-posts.how-many=3</item>
<item>widget.recent-posts.show-excerpt</item>
</items>
</xsl:with-param>
</xsl:call-template>
L'idée est qu'ensuite, depuis le widget
modèle je pourrais écrire quelque chose comme:
<xsl:value-of select="$flags/item[1]" />
J'ai évidemment des erreurs de compilation.. comment puis-je obtenir ce genre de chose?
Vous devez vous connecter pour publier un commentaire.
Il y a un moyen (non-standard) en XSLT 1.0 pour créer temporaire arbres dynamiquement et évaluer des expressions XPath sur eux, toutefois, cela exige de l'aide de l'
xxx:node-set()
fonction.Chaque fois que les nœuds sont créés dynamiquement à l'intérieur du corps d'un
xsl:variable
ou unxsl:param
, le type de l'xsl:variable
/xsl:param
est RTF (Result Tree Fragment) et le W3 XSLT 1.0 Spec. les limites de severyly le genre d'expressions XPath qui peut être évaluée à l'encontre d'un fichier RTF.Comme une solution de contournement, presque tous les XSLT 1.0 fournisseur a son propre
xxx:node-set()
extension fonction qui prend un fichier au format RTF et produit un noeud normal de il.L'espace de noms auquel le
xxx
préfixe (ou tout autre préfixe que vous choisissez) est lié est différente pour les différents fournisseurs. Pour MSXML et les deux .NET processeur XSLT c'est:"urn:schemas-microsoft-com:xslt"
. Le EXSLT bibliothèque utilise l'espace de noms:"http://exslt.org/common"
. Cet espace de noms EXSLT est mis en œuvre sur de nombreux processeurs XSLT 1.0 et il est recommandé d'utiliser sesxxx:node-set()
extension, si possible.Voici un exemple rapide:
Bien, j'ai réussi à contourner ce problème de la manière suivante:
D'abord ajouter un espace de noms personnalisé à votre feuille de style, par exemple
xmlns:myns="http://my.ns.com"
Puis de définir l'ensemble de nœuds dans le haut de la feuille de style:
Puis de référence de la manière suivante:
Cela fonctionne, mais il serait idéal pour moi de définir le nœud de l'
<xsl:with-param>
balise elle-même, comme dans le premier exemple que j'ai donné.. quelqu'un pense que ce serait possible?In addition, the xsl:stylesheet element may contain any element not from the XSLT namespace, provided that the expanded-name of the element has a non-null namespace URI. (...) Such elements can provide, for example, information used by extension elements or extension functions, information about what to do with the result tree, information about how to obtain the source tree, metadata about the stylesheet, structured documentation for the stylesheet.
document('')
invocation...