Convertit une chaîne de node-set
Dans mon fichier xsl,
Je suis séparée du document xml (à côté du principal document xml
que je suis la transformation) comme une chaîne de caractère en paramètre (param)
dire que ma param name est seconddoc
<xsl:param name="seconddoc"></xsl:param>
et le param valeur est le suivant (encore une fois, je suis toute chose comme une chaîne de caractères)
<products>
<product>
<id>1</id>
<name>pro-1</name>
</product>
<product>
<id>2</id>
<name>pro-2</name>
</product>
<product>
<id>3</id>
<name>pro-3</name>
</product>
</products>
Je peux imprimer à l'ensemble de la chaîne comme suit
<xsl:value-of select="$seconddoc" />
Mais je veux parcourir les données (string) au lieu d'obtenir de l'ensemble de la valeur à la fois.
mon but final est de charger les données d'une option de sélection.
Je fatigué comme ceci:
<select>
<xsl:for-each select="$seconddoc/products/product">
<option value="{id}">
<xsl:value-of select="name" /></option>
</xsl:for-each>
</select>
mais je suis TransformerException. "Invalid conversion from 'java.lang.Chaîne' à 'node-set".
mise à jour:
C'est ce que j'ai dans ma page jsp
<x:transform xml="${mainxmldoc}" xslt="${xslt}">
<x:param name="seconddoc" value="<%=xmlString %>"/>
</x:transform>
- Qui processeur XSLT utilisez-vous, et qu'il ne dispose d'aucun moyen de passer en paramètre sous la forme d'un ensemble de nœuds, en premier lieu? Ou, à défaut, il peut vous laisser un URI pour le XML supplémentaires que vous pouvez ensuite charger à l'aide de la
document
fonction? - Merci Ian Roberts. Je suis nouveau sur xslt. Je ne pense pas que je vais utiliser un autre processeur. le fichier xml, je suis arriver à partir d'une page jsp. et dans son être généré dynamiquement. Donc pas de URI. Comment puis-je passer comme ensemble de nœuds à partir d'une JSP toute suggestion?
- Pourriez-vous modifier la question d'inclure la partie pertinente de la page JSP d'où vous appelez la transformation XSLT?
- C'est ce que j'ai dans ma page JSP........ <x:transformer du xml="${mainxmldoc}" xslt="${xslt}"> <x:param name="seconddoc" value="<%=xmlString %>"/> </x:transform>
- Semble similaire à cette question stackoverflow.com/questions/3959497/... Essayez d'utiliser
exslt:node-set
mais je doute qu'il va travailler. - oui je suis fatigué, que (stackoverflow.com/questions/3959497/...) ne fonctionne pas
Vous devez vous connecter pour publier un commentaire.
Avec le
<x:parse>
balise, vous pouvez traiter votre contenu de cette façon:Et, par la suite, souhaité nœud avec XPath:
il ressemble à un param ne peut pas se convertir à node-set. mais une variable peut!
donc, la façon dont je l'ai résolu.
D'abord, déclarer une variable et de mettre la valeur du paramètre dans la variable.
Puis de convertir la variable de node-set.
Maintenant, nous pouvons itérer le node-set
voici le code complet
<xsl:variable><xsl:value-of/></xsl:variable>
et pas<xsl:variable select="" />
Vous êtes probablement à l'aide de l'intégré dans le processeur XSLT 1.0, qui est livré avec le JDK, qui est une version de Xalan. Il n'y a pas de manière standard dans XSLT 1.0 ou 2.0 pour invoquer un analyseur XML (qui est ce que vous devez faire pour convertir une chaîne de caractères à un nœud). Vous avez besoin de faire la conversion à l'extérieur de la transformation (passage d'un nœud en tant que paramètre), ou utiliser une extension qui fait le travail. Je crois me souvenir que Xalan de la mise en œuvre de exslt:node-set() pourrait le faire; le vérifier. Sinon, puisque vous êtes dans le monde Java, tout un tas de choses serait beaucoup plus facile si vous avez mis à niveau pour XSLT 2.0 (sens Saxon). Je ne suis pas sûr de savoir comment bien Saxon joue avec les JSP (il peut certainement être fait, mais je ne sais pas si vous pouvez utiliser le x:transformation de la bibliothèque de balises). Saxon a un saxon:parse fonction d'extension, qui, dans le projet 3.0 spécifications est remplacé par une norme de la fonction parse xml().