XSLT,如何在“xsl:if”中使用“xsl:value-of”?

时间:2013-06-27 10:29:16

标签: xslt escaping

我是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()"/>但双引号存在问题。我应该使用转义字符(如果是,它们是什么?)还是有更好的解决方案?

2 个答案:

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