我想在下面的 xsl:value-of xsl语句中输出围绕$ ID变量的单引号。
<xsl:value-of select="concat('process[@Ref=',$ID,']')"></xsl:value-of>
目前正在打印
process@Ref=87799989
请让我知道如何实现这一目标。
提前致谢, 凯沙夫
答案 0 :(得分:39)
在XPath 1.0中:
您可以使用内置实体'
和"
在XSLT 1.0中:
或者,您可以定义$Q
和$APOS
变量(将内容(文字“或文字”字符)放在xsl:variable
的正文中,而不是select
中。 {1}}属性)。
在XPath 2.x 中(这也意味着XSLT 2.x和XQuery 1.x)
只需通过输入两个相邻的撇号来逃避撇号,通过输入两个相邻的引号来逃避引号, as defined by the XPath 2.0 language
答案 1 :(得分:34)
要扩展Dimitre的答案,您可以在XSLT中使用此解决方案:
<xsl:variable name="apos">'</xsl:variable>
<xsl:value-of select="concat('process[@Ref=',$apos,$ID,$apos,']')"></xsl:value-of>
答案 2 :(得分:29)
使用'
?
<xsl:value-of select="concat('process[@Ref='',$ID,'']')"></xsl:value-of>
修改:有关更好的解决方案,请参阅Dimitre's answer。
答案 3 :(得分:4)
<xsl:value-of
select="concat('process[@Ref='',$ID,'']')"></xsl:value-of>
这对我不起作用。我的解决方案是:
<xsl:value-of select="concat("process[@Ref='",$oidConstant,"'")"></xsl:value-of>
答案 4 :(得分:0)
简单示例
<xsl:variable name="varTitle" select="title" />
<xsl:variable name="APOS">'</xsl:variable>
<xsl:value-of select="translate($varTitle, 'any text', $APOS)"/>
这将用“在我的标题中”替换“任何文字”。
答案 5 :(得分:0)
您可以使用变量分配内的字符串连接,而不必使用concat()
。这样就可以编写一个简单的,未经转义的'
来表示'
:
<xsl:variable name="process-selector">process[@Ref='<xsl:value-of select="$ID"/>']</xsl:variable>
<xsl:value-of select="$process-selector" />
使用recommended way允许换行而不会在输出中意外添加空格,这变得很长(但这是XSL,对吗?):
<xsl:variable name="process-selector">
<xsl:text>process[@Ref='</xsl:text>
<xsl:value-of select="$ID"/>
<xsl:text>']</xsl:text>
</xsl:variable>
<xsl:value-of select="$process-selector" />
此解决方案要测试的完整XSL文件,例如使用xsltransform.net之类的在线XSL-T服务:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="html"/>
<xsl:template match="/" name="strip-space" >
<xsl:variable name="ID" select="123"/>
<xsl:variable name="process-selector">
<xsl:text>process[@Ref='</xsl:text>
<xsl:value-of select="$ID"/>
<xsl:text>']</xsl:text>
</xsl:variable>
<xsl:value-of select="$process-selector" />
</xsl:template>
</xsl:transform>