xpath-fonction max ne fonctionne pas
Pour une raison inconnue de max ne fonctionne pas.
Fichier d'entrée XML:
test.xml
<?xml version="1.0" encoding="UTF-8"?>
<numbers>
<number>3</number>
<number>5</number>
<number>10</number>
<number>1</number>
</numbers>
XSL fichier d'entrée
test.xsl
<?xml version="1.0"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fn="http://www.w3.org/2005/02/xpath-functions"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" >
<xsl:output method="xml" indent="yes" />
<xsl:template match="/numbers">
<numbers>
<xsl:value-of select="/numbers/number" />
fn:max(2, 3)
</numbers>
</xsl:template>
</xsl:stylesheet>
Output.xml
<?xml version="1.0" encoding="UTF-8"?>
<numbers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:fn="http://www.w3.org/2005/02/xpath-functions">3
fn:max(2, 3)
</numbers>
Fichier d'entrée n'est pas important ici, mais je voudrais avoir la " 3 " au lieu de fn:max(2, 3). Comment faire?
pour ce fichier XSL:
<?xml version="1.0"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fn="http://www.w3.org/2005/02/xpath-functions"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" >
<xsl:output method="xml" indent="yes" />
<xsl:template match="/numbers">
<numbers>
<xsl:value-of select="/numbers/number" />
fn:max(2, 3)
<xsl:value-of select="max(/numbers/number)"/>
</numbers>
</xsl:template>
</xsl:stylesheet>
l'erreur suivante se produit:
Idsystème Inconnu; la Ligne #13; dans la Colonne N ° 49; ne Pouvait pas trouver la fonction: max
Idsystème Inconnu; la Ligne #13; dans la Colonne n ° 49; fonction jeton pas trouvé.
(Emplacement de l'erreur inconnu)de java.lang.NullPointerException
(Emplacement de l'erreur inconnue)XSLT Erreur (javax.xml.transformer.TransformerException)
: Pas de xml-stylesheet PI trouvé dans: test.xml
Exception in thread "main" java.lang.RuntimeException: Pas de xml-stylesheet PI foun
d: test.xml
au org.apache.xalan.xslt.Processus.doExit(Processus.java:1155)
au org.apache.xalan.xslt.Processus.principal(le Processus.java:1128)
J'ai utilisé Xalan - Version Xalan Java 2.7.1, Commande: java org.apache.xalan.xslt.Processus de la test.xml -xsl test.xsl -out output.xml
Vous devez vous connecter pour publier un commentaire.
Il y a plusieurs problèmes: max() doit être une valeur de, et que vous avez dit
xsl:stylesheet version="2.0"
pour Xalan, qui ne prend en charge XSLT 1.0. Pour la 2.0, vous devez Saxon 9.x.Depuis que max() ne fait pas partie de XSLT 1.0, vous devez invoquer le EXSLT le support de l'extension, qui Xalan n'ont:
ou
Vous ai mis
fn:max(2,3)
dans un bloc de texte. Rien ne va à l'interpréter. Vous avez besoin de mettre les fonctions dansvalue-of
expressions si vous voulez être évalué.<xsl:value-of select="fn:max((2,3))"/>
- la fonction prend un seul argument, qui est une séquence de chiffres; il ne peut pas être appelé avec deux arguments.Lavino,
Merci pour la réponse. Je ne sais pas pourquoi, mais j'étais à peu près sûr que Xalan prend en charge 2.0... je l'ai testé et il fonctionne pour Saxonne 9.
Vous pouvez utiliser
pour tirer le max de tous les numéros.
Soln:
Vous pouvez omettre le numéro de modèle et
<xsl:apply-templates/>
si elle n'est pas requis. Ce sera la sortie ci-dessus, xslt: