我知道问题已经多次回答,但由于某种原因对我不起作用。 所以我想要实现的是通过使用它的属性值输出元素的内容来访问它,而不是声明属性的特定值,如:
<xsl:value-of select="title[@attribute='value']"/>
这适用于我的代码,但我想使用类似的变量:
<xsl:value-of select="title[@attribute='$variable']"/>
但无论我做什么或尝试不同的方式 如:
<xsl:value-of select="//title[@attribute='$variable']"/>
或
<xsl:value-of select="//title[@attribute= $variable]"/>
没有任何东西,我没有从撒克逊人那里得到任何错误,所以我不知道最近会发生什么。
xml文件
<root>
<documentname>
<element>text</element>
.
.
<element1 atributename1="VALUE1">text</element1>
.
.
<element95 atributename1="value1" secondatribute="0001"/>
.
.
</documentname>
</root>
xsl文件
<xsl:template match="element95 ">
<xsl:choose>
<xsl:when test="@atributename1">
<xsl:variable name="keyb" select="substring(@secondatribute,1,4)"/>
<xsl:variable name="keyval" select="substring(@atributename1, 0,6)" />
<xsl:variable name="keyc">
<xsl:value-of select="'upper-case($keyval)'"/></xsl:variable>
<a href="#{$keyc}"><xsl:value-of select="($keyb)"/>.0(<xsl:value-of select="//element1 [@atributename1=($keyc)]"/>)</a>
</xsl:when>
</xsl:choose>
输出
1.0()
所需的输出:
1.0(text)
答案 0 :(得分:0)
您的问题归结为字符串文字
<xsl:value-of select="//title[@attribute='$variable']"/>
说“我希望将该属性的值设为实际字符串'$ variable'” 所以你想使用:
<xsl:value-of select="//title[@attribute= $variable]"/>
但是在设置变量时你也犯了这个错误:
<xsl:variable name="keyc">
<xsl:value-of select="'upper-case($keyval)'"/></xsl:variable>
使用:
<xsl:variable name="keyc">
<xsl:value-of select="upper-case($keyval)"/></xsl:variable>
或更具可读性
<xsl:variable name="keyc" select="upper-case($keyval)"/>
通常在xslt中读取字符串处理和扩展。
答案 1 :(得分:0)
以下是您的XSL代码的一些问题:
$keyc
变量已设置为文字字符串'upper-case($keyval)'
。删除单引号以使其被识别为XPath表达式并进行正确评估。
substring(@atributename1, 0,6)
会返回'value'
。目前还不清楚您要在此处实现的目标,但这肯定会导致//element1[@atributename1=($keyc)]
以后找不到匹配项,因为在{1}}中没有atributename1
的值等于'value'
XML示例。您希望将substring()
参数设置为更高的长度,或者在将substring()
与@atributename1
进行比较时使用相同长度的$keyc
。