2010-09-14 6 views
0

J'ai le code xsl ci-dessous, mais ça ne fonctionne pas, quelqu'un pourrait me guider.La variable XSLT ne fonctionne pas

<xsl:variable name="indent"> 
    <xsl:if test="@type='Text'"> 
     <xsl:if test="@required='yes'"> 
      <xsl:variable name="indent" select="'return ValidateText(this)'" /> 
     </xsl:if> 
     <asp:TextBox id="{@id}" onkeypress="{$indent}" runat="server" /> 
    </xsl:if> 
</xsl:variable> 

J'ai besoin d'affecter le retour ValidateText(this) onkeypress même si à l'intérieur xml le nécessaire est oui.

+0

"ne fonctionne pas", sans déclaration de * comment * il ne fonctionne pas (par exemple Le processeur XSLT donne une erreur), semble indiquer que vous voulez que nous fassions beaucoup de conjectures au lieu que vous fassiez le travail d'énoncer clairement la question. – LarsH

+0

@LarsH et @Khan: La partie qui ne fonctionne pas est évidemment l'utilisation de la variable 'indent' la plus interne en dehors de sa portée. Dans XSLT 2.0, cela génère une erreur car la définition circulaire: l'utilisation de la valeur «indent» la plus externe dans son propre modèle de contenu. Dans XSLT silencieusement, évaluez la référence de variable à rien. –

+0

@Alejandro: oui, j'ai vu ça mais je vois cette chose "ne fonctionne pas" si souvent, présentée comme si elle était une déclaration complète du problème, je pensais que ça valait la peine de signaler à Khan. Pourquoi devriez-vous et moi faire le travail d'enquêter et de taper cela, quand il a l'erreur devant lui? ou au moins il peut dire que la variable d'indentation finit avec une valeur vide. Il a des informations par lesquelles il sait que ça ne marche pas; Comme quelqu'un qui demande de l'aide, la décence dit qu'il devrait partager cette information. @Khan, voir http://tinyurl.com/so-hints – LarsH

Répondre

0

Il est difficile d'obtenir exactement ce que vous recherchez, mais je ferais la conjecture suivante

<xsl:if test="@type='Text'> 
    <asp:TextBox id="{@id}" runat="server" > 
     <xsl:if test="@required='yes'"> 
      <xsl:attribute name="onkeypress"> 
       <xsl:text>return ValidateText(this)</xsl:text> 
      </xsl:attribute> 
     </xsl:if> 
    </asp:TextBox> 
</xsl:if> 
0

Il est pas clair ce qui est voulu exactement, mais je pense que vous voulez quelque chose comme ça :

<xsl:variable name="indent"> 
<xsl:choose> 
    <xsl:when test="@type='Text' and @required='yes'"> 
    <xsl:text>return ValidateText(this)</xsl:text> 
    </xsl:when> 
    <xsl:otherwise>someDefault</xsl:otherwise> 
</xsl:choose> 
</xsl:variable> 

<asp:TextBox id="{@id}" onkeypress="{$indent}" runat="server" /> 
0

L'autre deviner, cette feuille de style:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:asp="remove"> 
    <xsl:template match="root"> 
     <xsl:copy> 
      <xsl:apply-templates/> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="/*/*"> 
     <xsl:variable name="indent"> 
      <xsl:if test="@type='Text'"> 
       <asp:TextBox id="{@id}" 
          onkeypress="{substring('return ValidateText(this)', 
                1 div (@required='yes'))}" 
          runat="server" /> 
      </xsl:if> 
     </xsl:variable> 
     <xsl:copy-of select="$indent"/> 
    </xsl:template> 
</xsl:stylesheet> 

Avec cette entrée:

<root> 
    <form id="form1" type='Text' required="yes"/> 
    <form id="form2" type='Text' required="no"/> 
    <form id="form3" type='Input' required="yes"/> 
</root> 

Sortie:

<root> 
    <asp:TextBox id="form1" onkeypress="return ValidateText(this)" runat="server" xmlns:asp="remove" /> 
    <asp:TextBox id="form2" onkeypress="" runat="server" xmlns:asp="remove" /> 
</root> 
Questions connexes