我需要这样做:
<xsl:with-param name="callme" select="'validateInput(this,'an');'"/>
我已阅读Escape single quote in xslt concat function并告诉我将'
替换为'
我已经完成但尚未使用..
有谁知道我们如何解决这个问题?:
<xsl:with-param name="callme" select="'validateInput(this,'an');'"/>
答案 0 :(得分:10)
可以在任何版本的XSLT中使用的简单:
<xsl:variable name="vApos">'</xsl:variable>
我经常使用相同的技术来指定引用:
<xsl:variable name="vQ">"</xsl:variable>
然后,您可以使用标准XPath函数concat()
将任何这些变量散布到任何文本中:
concat('This movie is named ', $vQ, 'Father', $vApos, 's secrets', $vQ)
所以,这次转型:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:variable name="vApos">'</xsl:variable>
<xsl:variable name="vQ">"</xsl:variable>
<xsl:template match="/">
<xsl:value-of select=
"concat('This movie is named ', $vQ, 'Father', $vApos, 's secrets', $vQ)
"/>
</xsl:template>
</xsl:stylesheet>
<强>产生强>:
This movie is named "Father's secrets"
答案 1 :(得分:4)
在XSLT 2.0中,您可以将字符用作字符串分隔符,将其加倍,所以
<xsl:with-param name="callme" select="'validateInput(this,''an'');'"/>
另一种解决方案是使用变量:
<xsl:variable name="apos">'</xsl:variable>
<xsl:variable name="quot">"</xsl:variable>
<xsl:with-param name="callme" select="concat('validateInput(this,', $apos, 'an', $apos, ');')"/>
答案 2 :(得分:3)
这有点棘手,但你需要反转撇号和引号,如下所示:
<xsl:with-param name="callme" select='"validateInput(this,'an');"' />
您将一个字符串包含在一组引号中,并将包含该字符串的属性值包含在另一组引号中。在XSLT中,只要您不使用相同的引号,您使用的引号在两种情况下都是可互换的。
以前,您的'
被解析为正在读取match
属性的值,并且它正在尝试将select的值设置为'validateInput(this,'an');'
。虽然这在技术上是一个有效的字符串值,但是当XSLT处理它时,它无法解析它,因为它试图将其作为字符串文字读取,它在an
之前提前终止,因为在那里使用相同的撇号用于封闭字符串。
答案 3 :(得分:1)
使用&amp; quot;而不是&amp; (通过使用&amp; quot;你实际上在单引号内嵌套单引号;你需要在嵌套时交替单引号和双引号,必要时转义。)