xslt需要选择单引号

时间:2011-06-08 08:18:44

标签: html xml xslt xpath

我需要这样做:

<xsl:with-param name="callme" select="'validateInput(this,'an');'"/>

我已阅读Escape single quote in xslt concat function并告诉我将'替换为&apos;我已经完成但尚未使用..

有谁知道我们如何解决这个问题?:

<xsl:with-param name="callme" select="'validateInput(this,&apos;an&apos;);'"/>

4 个答案:

答案 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,&apos;an&apos;);"' />

您将一个字符串包含在一组引号中,并将包含该字符串的属性值包含在另一组引号中。在XSLT中,只要您不使用相同的引号,您使用的引号在两种情况下都是可互换的。

以前,您的&apos;被解析为正在读取match属性的值,并且它正在尝试将select的值设置为'validateInput(this,'an');'。虽然这在技术上是一个有效的字符串值,但是当XSLT处理它时,它无法解析它,因为它试图将其作为字符串文字读取,它在an之前提前终止,因为在那里使用相同的撇号用于封闭字符串。

答案 3 :(得分:1)

使用&amp; quot;而不是&amp; (通过使用&amp; quot;你实际上在单引号内嵌套单引号;你需要在嵌套时交替单引号和双引号,必要时转义。)