2010-05-08 2 views
2

J'essaie d'obtenir un ensemble de nœuds à partir d'une variable xsl pour le calcul. Mais mon code ne fonctionne qu'avec Opera, avec d'autres navigateurs, je continue à recevoir l'erreur.xsl: variable ne renvoie pas un ensemble de nœuds dans XSLT 2.0?

S'il vous plaît aidez-moi à corriger pour fonctionner avec tous les navigateurs. Merci d'avance.

Voici le code xslt:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions"> 
<xsl:output method="html"/> 

<xsl:variable name="multipleSet"> 
<xsl:for-each select="myNums/numSet"> 
    <xsl:element name="multiple"><xsl:value-of select="num1 * num2"/></xsl:element> 
</xsl:for-each> 
</xsl:variable> 
<xsl:template match="/"> 
<table border="1"> 
    <tr> 
    <th>Num 1</th> 
    <th>Num 2</th> 
    <th>Multiple</th> 
    </tr> 
    <xsl:for-each select="myNums/numSet"> 
    <tr> 
    <td><xsl:value-of select="num1"/></td> 
    <td><xsl:value-of select="num2"/></td> 
    <td><xsl:value-of select="num1 * num2"/></td> 
    </tr> 
    </xsl:for-each> 
    <tr> 
    <th colspan="2" align="right">Total:</th> 
    <td><xsl:value-of select="sum($multipleSet/multiple)"/> </td> 
    </tr> 
</table> 
</xsl:template> 
</xsl:stylesheet> 

Et le xml:

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="test.xsl"?> 
<myNums> 
<numSet> 
    <num1>5</num1> 
    <num2>5</num2> 
</numSet> 
<numSet> 
    <num1>10</num1> 
    <num2>5</num2> 
</numSet> 
<numSet> 
    <num1>15</num1> 
    <num2>20</num2> 
</numSet> 
</myNums> 
+0

Quelles erreurs obtenez-vous dans d'autres navigateurs? – Oded

+0

IE: La référence à la variable ou au paramètre 'multipleSet' doit être évaluée par rapport à une liste de noeuds. Firefox: Erreur lors de la transformation XSLT: Une expression XPath devait renvoyer un NodeSet. Désolé pour la réponse tardive. – Henry

Répondre

0

navigateurs Web ne prennent pas en charge habituellement xslt 2.0. Xpath sum() attend un ensemble de nœuds. Ce que vous lui transmettez est un "fragment d'arbre de résultat". Le type de données de fragment d'arbre de résultat a été supprimé dans XSLT 1.1. Donc ce que vous rencontrez est:

  • Opera ne vous dit pas par un message d'erreur qu'il ne supporte pas xslt 2,0 (Opera specification)
  • Opera ne se conforme pas entièrement à la spécification 1.0

Vous pouvez essayer de spécifier version="1.1" et voir si cela aide. Sinon, vous pouvez essayer si les navigateurs supportent exsl:node-set().

+0

Oui, vous avez raison. C'est ma faute de ne pas vérifier le support xslt 2.0 en premier lieu. En utilisant EXSLT, tout ira bien, mais pas avec IE, MS ont leurs propres extensions msxsl. Je veux afficher le document sur n'importe quel navigateur avec xslt 2.0, doit trouver une autre façon cependant. Merci de m'avoir indiqué le point. :) – Henry

Questions connexes