XSLT变量不起作用

时间:2010-09-14 16:14:41

标签: xml vb.net xslt

我有以下xsl代码,但它不起作用,任何人都可以指导我。

<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>

我需要在onkeypress上指定return ValidateText(this),即使在xml中需要的是。

3 个答案:

答案 0 :(得分:0)

很难准确得到你想要的东西,但我会做出以下猜测

<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>

答案 1 :(得分:0)

目前还不清楚到底想要什么,但我想你想要这样的东西

<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" />

答案 2 :(得分:0)

另一个猜测,这个样式表:

<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>

使用此输入:

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

输出:

<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>