开发者

xslt need to select a single quote

开发者 https://www.devze.com 2023-03-11 23:04 出处:网络
i need to do this: <xsl:with-param name=\"callme\" select=\"\'validateInput(this,\'an\');\'\"/> I\'ve read Escape single quote in xslt concat function and it tells me to replace \' with &

i need to do this:

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

I've read Escape single quote in xslt concat function and it tells me to replace ' with &apos; I've done that开发者_JAVA技巧 yet its still not working..

Does anyone know how do we fix this?:

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


Something simple that can be used in any version of XSLT:

<xsl:variable name="vApos">'</xsl:variable>

I am frequently using the same technique for specifying a quote:

<xsl:variable name="vQ">"</xsl:variable>

Then you can intersperse any of these variables into any text using the standard XPath function concat():

concat('This movie is named ', $vQ, 'Father', $vApos, 's secrets', $vQ)

So, this transformation:

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

produces:

This movie is named "Father's secrets"


In XSLT 2.0 you can the character used as a string delimiter by doubling it, so

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

Another solution is to use variables:

<xsl:variable name="apos">'</xsl:variable>
<xsl:variable name="quot">"</xsl:variable>

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


This is a little tricky, but you need to invert the apostrophe and quotes, like this:

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

You're enclosing a string within one set of quotes, and the attribute value that contains it in another. In XSLT, which quotes you use are interchangeable in both cases, as long as you don't use the same one.

Previously, your &apos; was being parsed as the value of the match attribute was being read, and it was trying to set the value of the select to 'validateInput(this,'an');'. Although this is technically a valid string value, when XSLT processes it, it fails to parse it because it's tries to read it as a string literal, which is terminated prematurely before the an, as the same apostrophe is used there as was used to enclose the string.


Use &quot; rather than &apos; (by using &apos; you are effectively nesting single quotation marks inside single quotation marks; you need to alternate single and double quotation marks as you nest, escaping as necessary).

0

精彩评论

暂无评论...
验证码 换一张
取 消