我试图在xsl中对字符串进行标记,尽管它不起作用,也没有给出任何错误。
的xsl:
<xsl:template name="checkCheckBoxValue">
<xsl:param name="elementId" />
<xsl:param name="mode" />
<xsl:for-each select="/Properties/Data/Result/ValidationErrors/FieldName">
<xsl:if test="$elementId = @name ">
<xsl:for-each select="tokenize(@text, ',')">
<xsl:if test=" mode = current() ">
<xsl:attribute name="checked">
<xsl:value-of select=" 'checked' " />
</xsl:attribute>
</xsl:if>
</xsl:for-each>
</xsl:if>
</xsl:for-each>
</xsl:template>
@text中的值是火车,公共汽车,渡轮
我在模式中单独传递这些值。
答案 0 :(得分:1)
我希望<xsl:if test=" mode
内的for-each
错误告诉您上下文项是一个字符串值,这样做mode
来访问子节点是没有意义的。
使用<xsl:if test="$mode = .">
,假设您要比较mode
参数。总而言之,您应该能够将代码缩短为
<xsl:template name="checkCheckBoxValue">
<xsl:param name="elementId" />
<xsl:param name="mode" />
<xsl:for-each select="/Properties/Data/Result/ValidationErrors/FieldName[$elementId = @name]">
<xsl:for-each select="tokenize(@text, ',')[$mode = .]">
<xsl:attribute name="checked">checked</xsl:attribute>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
答案 1 :(得分:0)
我使用此源测试了您的XSLT模板:
<Properties>
<Data>
<Result>
<ValidationErrors>
<FieldName name="first" text="Train,Bus,Ferry"></FieldName>
</ValidationErrors>
</Result>
</Data>
</Properties>
并将其放在一个完整的XSLT样式表中,模板调用您的模板传递一些参数以允许if:test
运行:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="/">
<result>
<xsl:call-template name="checkCheckBoxValue">
<xsl:with-param name="elementId">first</xsl:with-param>
<xsl:with-param name="mode" select="('Train')"/>
</xsl:call-template>
</result>
</xsl:template>
<xsl:template name="checkCheckBoxValue">
<xsl:param name="elementId" />
<xsl:param name="mode" />
<xsl:for-each select="/Properties/Data/Result/ValidationErrors/FieldName">
<xsl:if test="$elementId = @name ">
<xsl:for-each select="tokenize(@text, ',')">
<xsl:if test=" $mode = current() ">
<xsl:attribute name="checked">
<xsl:value-of select=" 'checked' " />
</xsl:attribute>
</xsl:if>
</xsl:for-each>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
我发现的唯一错误是mode
变量,该xsl:if
变量在$
内没有$
被调用。添加它工作的<result checked="checked"/>
并生成以下结果:
{{1}}
如果此测试用例与您的问题相符且无法正常工作,原因可能在其他地方(在您的来源或其他模板中干扰它。