我是xslt的新手,我想知道是否可以比较“@userNameKey”的值和值
以下示例中为<xsl:value-of select="./text()"/>
?
<xsl:if test="@userNameKey='??????'">
<xsl:attribute name="selected">true</xsl:attribute>
</xsl:if>
<xsl:value-of select="./text()"/>
基本上,我只想用以下片段替换问号:<xsl:value-of select="./text()"/>
但双引号存在问题。我应该使用转义字符(如果是,它们是什么?)还是有更好的解决方案?
答案 0 :(得分:2)
如果您特别想要与当前元素的第一个文本节点子节点的值进行比较(这是<xsl:value-of select="./text()"/>
给出的),请使用
<xsl:if test="@userNameKey=string(text())">
乍一看
<xsl:if test="@userNameKey=text()">
可能看起来更明显,但这是微妙的不同,如果userNameKey
匹配任何一个当前元素的文本节点子节点(不一定是第一个),则返回true。
但是如果(我怀疑你真的是这个意思)你想要将userNameKey
与元素的完整字符串值进行比较,即使它包含多个文本节点,那么使用
<xsl:if test="@userNameKey=.">
请记住,text()
是一个包含上下文节点的所有文本节点子节点的节点集,如果您不确定是否需要使用它(例如,当您想要单独处理每个单独的文本节点时)那么你可能没有。
答案 1 :(得分:0)
你应该能做到这一点......
<xsl:if test="@userNameKey=./text()">
<xsl:attribute name="selected">true</xsl:attribute>
</xsl:if>
事实上,这里不需要./
,所以你可以这样做
<xsl:if test="@userNameKey=text()">
<xsl:attribute name="selected">true</xsl:attribute>
</xsl:if>