2010-03-29 25 views
1

Essayer de marquer les entrées de radio tel que sélectionné avec XSLT 1.0 en utilisant le code suivant XSLT mais cela ne produit pas le résultat escomptéXSLT Attribut pas ajouté

résultat desrired

<input type="radio" value="available" title="email" selected="selected" /> 

réel de sortie

<input type="radio" value="available" title="email" selected /> 

Quelqu'un a des idées pourquoi pas s'il vous plaît?

XSLT

<xsl:variable name="selected">selected</xsl:variable> 
    <xsl:for-each select="item"> 
    <tr> 

    <td><xsl:value-of select="title" /></td> 

    <td> 
     <input type="radio" value="available" > 
     <xsl:attribute name="name"> 
     <xsl:value-of select="title" /> 
     </xsl:attribute> 
     <xsl:if test="category='available'"> 
     <xsl:attribute name="selected"> 
      <xsl:value-of select="$selected"/> 
     </xsl:attribute> 
     </xsl:if> 
     </input> 
    </td> 

    <td> 
     <input type="radio" value="unavailable" > 
     <xsl:attribute name="name"> 
     <xsl:value-of select="title" /> 
     </xsl:attribute> 
     <xsl:if test="category='unavailable'"> 
     <xsl:attribute name="selected"> 
     <xsl:value-of select="$selected"/> 
     </xsl:attribute> 
     </xsl:if> 
     </input> 
    </td> 


    <td> 
     <input type="radio" value="warning" > 

     <xsl:if test="category='warning'"> 
     <xsl:attribute name="selected"> 
      <xsl:value-of select="$selected"/> 
      </xsl:attribute> 
      <xsl:attribute name="name"> 
     <xsl:value-of select="title" /> 
     </xsl:attribute> 
     </xsl:if> 
     </input> 
    </td> 

    </tr> 

    </xsl:for-each> 

Répondre

2

Cela est dû à votre mode de sortie. Avez-vous demandé à votre processeur XSLT de produire du HTML (plutôt que du XML)? Si tel est le cas, le sérialiseur de sortie est adapté pour s'adapter aux particularités du code HTML; de sorte que, par exemple, il génère <br> plutôt que <br/> et qu'il peut laisser de côté le contenu de l'attribut s'il est identique au nom de l'attribut.

Cela ne devrait pas poser de problème; C'est un HTML légal, au fait.

Pour plus de détails; la spécification a une section sur what exactly html output mode is supposed to do. Amonst autres choses, il dit ...

La méthode de sortie html doit attributs booléens de sortie (qui est attributs avec une seule valeur autorisée qui est égale au nom de l'attribut) sous forme réduite au minimum. Par exemple, une start-tag écrit dans la feuille de style comme

<OPTION selected="selected"> 

devrait être sortie comme

<OPTION selected> 
+1

Merci très beaucoup, c'était tout. Aussi réalisé que je devrais utiliser check = "vérifié" –

+0

Ah oui, cette erreur le rend facile à trébucher sur XSLT arcana ;-) - bonne prise! (Vous pourriez être capable d'attraper ce genre d'erreur en utilisant le validateur HTML - cela devrait probablement détecter les attributs qui n'ont pas de sens.) –