在xslt concat函数中转义单引号

时间:2010-05-22 07:19:30

标签: xslt xml javascript

我想在下面的 xsl:value-of xsl语句中输出围绕$ ID变量的单引号。

<xsl:value-of select="concat('process[@Ref=',$ID,']')"></xsl:value-of>

目前正在打印

process@Ref=87799989

请让我知道如何实现这一目标。

提前致谢, 凯沙夫

6 个答案:

答案 0 :(得分:39)

在XPath 1.0中

您可以使用内置实体&apos;&quot;

在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)

使用&apos;

<xsl:value-of select="concat('process[@Ref=&apos;',$ID,'&apos;]')"></xsl:value-of>

修改:有关更好的解决方案,请参阅Dimitre's answer

答案 3 :(得分:4)

<xsl:value-of
select="concat('process[@Ref=&apos;',$ID,'&apos;]')"></xsl:value-of>

这对我不起作用。我的解决方案是:

<xsl:value-of select="concat(&quot;process[@Ref='&quot;,$oidConstant,&quot;'&quot;)"></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>