2010-04-22 3 views
4

J'ai besoin de vérifier si un param a une valeur dedans et s'il a alors fait cette ligne sinon fais cette ligne.XSL vérifier la longueur param et faire un choix

Je l'ai travail alors que je ne reçois pas d'erreurs, mais il ne prend pas la branche droite

La branche qui est faux est dans le modèle de volunteer_role

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:key name="volunteers-by-region" match="volunteer" use="region" /> 
    <xsl:template name="hoo" match="/"> 
    <html> 
     <head> 
     <title>Registered Volunteers</title> 
     <link rel="stylesheet" type="text/css" href="volunteer.css" /> 
     </head> 
     <body> 
     <h1>Registered Volunteers</h1> 
     <h3>Ordered by the username ascending</h3> 
     <xsl:for-each select="folktask/member[user/account/userlevel='2']"> 
      <xsl:for-each select="volunteer[count(. | key('volunteers-by-region', region)[1]) = 1]"> 
      <xsl:sort select="region" /> 
      <xsl:for-each select="key('volunteers-by-region', region)"> 
       <xsl:sort select="folktask/member/user/personal/name" /> 
       <div class="userdiv"> 
        <xsl:call-template name="volunteer_volid"> 
        <xsl:with-param name="volid" select="../volunteer/@id" /> 
        </xsl:call-template> 
        <xsl:call-template name="volunteer_role"> 
        <xsl:with-param name="volrole" select="../volunteer/roles" /> 
        </xsl:call-template> 
        <xsl:call-template name="volunteer_region"> 
        <xsl:with-param name="volloc" select="../volunteer/region" /> 
        </xsl:call-template> 
       </div> 
       </xsl:for-each> 
      </xsl:for-each> 
      </xsl:for-each> 
      <xsl:if test="position()=last()"> 
      <div class="count"> 
       <h2>Total number of volunteers: <xsl:value-of select="count(/folktask/member/user/account/userlevel[text()=2])" /> 
       </h2> 
      </div> 
      </xsl:if> 
     </body> 
     </html> 
    </xsl:template> 

    <xsl:template name="volunteer_volid"> 
     <xsl:param name="volid" select="'Not Available'" /> 
     <div class="heading2 bold"><h2>VOLUNTEER ID: <xsl:value-of select="$volid" /></h2></div> 
    </xsl:template> 

    <xsl:template name="volunteer_role"> 
     <xsl:param name="volrole" select="'Not Available'" /> 
     <div class="small bold">ROLES:</div> 
     <div class="large"> 
     <xsl:choose> 
     <xsl:when test="string-length($volrole)!=0"> 
      <xsl:value-of select="$volrole" /> 
     </xsl:when> 
     <xsl:otherwise> 
      <xsl:text> </xsl:text> 
     </xsl:otherwise> 
     </xsl:choose> 
    </div> 
    </xsl:template> 

    <xsl:template name="volunteer_region"> 
    <xsl:param name="volloc" select="'Not Available'" /> 
    <div class="small bold">REGION:</div> 
    <div class="large"><xsl:value-of select="$volloc" /></div> 
    </xsl:template> 
</xsl:stylesheet> 

Et le XML:

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<?xml-stylesheet type="text/xsl" href="volunteers.xsl"?> 
<folktask xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="folktask.xsd"> 
    <member> 
    <user id="1"> 
     <personal> 
     <name>Abbie Hunt</name> 
     <sex>Female</sex> 
     <address1>108 Access Road</address1> 
     <address2></address2> 
     <city>Wells</city> 
     <county>Somerset</county> 
     <postcode>BA5 8GH</postcode> 
     <telephone>01528927616</telephone> 
     <mobile>07085252492</mobile> 
     <email>[email protected]</email> 
     </personal> 
     <account> 
     <username>AdRock</username> 
     <password>269eb625e2f0cf6fae9a29434c12a89f</password> 
     <userlevel>4</userlevel> 
     <signupdate>2010-03-26T09:23:50</signupdate> 
     </account> 
    </user> 
    <volunteer id="1"> 
     <roles></roles> 
     <region>South West</region> 
    </volunteer> 
    </member> 
    <member> 
    <user id="2"> 
     <personal> 
     <name>Aidan Harris</name> 
     <sex>Male</sex> 
     <address1>103 Aiken Street</address1> 
     <address2></address2> 
     <city>Chichester</city> 
     <county>Sussex</county> 
     <postcode>PO19 4DS</postcode> 
     <telephone>01905149894</telephone> 
     <mobile>07784467941</mobile> 
     <email>[email protected]</email> 
     </personal> 
     <account> 
     <username>AmbientExpert</username> 
     <password>8e64214160e9dd14ae2a6d9f700004a6</password> 
     <userlevel>2</userlevel> 
     <signupdate>2010-03-26T09:23:50</signupdate> 
     </account> 
    </user> 
    <volunteer id="2"> 
     <roles>Van Driver,gas Fitter</roles> 
     <region>South Central</region> 
    </volunteer> 
    </member> 
</folktask> 
+0

Votre choisir/quand/regarde autrement correct pour moi. Quelle est votre contribution? Vous pouvez toujours tester en insérant quelque chose comme et regardez ensuite la sortie. – topskip

+0

Où est-ce que je mets ça? Je l'ai mis directement après le nom de param ou entre le quand et je reçois une erreur disant "Erreur de chargement de la feuille de style: Échec de l'analyse d'une feuille de style XSLT." – AdRock

+0

Je l'ai mis juste après param (avant le div). Utilisez-vous XSLT 1.0? J'ai essayé avec XSLT 2.0. – topskip

Répondre

5

Ce qui suit devrait faire l'affaire:

<xsl:template name="volunteer_volid"> 
    <xsl:param name="volid" /> 
    <xsl:choose> 
    <xsl:when test="string-length($volid) > 0"> 
     <div class="heading2 bold"><h2>VOLUNTEER ID: <xsl:value-of select="$volid" /></h2></div> 
    </xsl:when> 
    <xsl:otherwise> 
     <!-- No volid --> 
    </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 

J'ai remplacé la valeur par défaut par une chaîne vide de sorte que le fait de ne pas fournir de valeur de paramètre équivaille à fournir la valeur du paramètre "". Si ce n'est pas le comportement souhaité puis modifiez les paramètres select et modifier l'expression test en conséquence, par exemple:

$volid != 'Not Available' 
Questions connexes