如何在xslt中将'转换为撇号

时间:2011-07-11 13:42:36

标签: xslt translate

代码的相关部分:

<xsl:variable name="apos">'</xsl:variable>
<xsl:variable name="and" select='"&#039;"' />

<xsl:value-of select="translate(products_name/node(),$and,$apos)"/>

我认为这应该是一件简单的事情,上面的代码应该可以工作,但它根本不会影响输出。

(我使用变量,因为名称不能在&符号内开始,只使用撇号会导致编译错误。)

我已经测试了代码,以确保翻译工作正在使用字符串,并且没有错误。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

你走在正确的轨道上,但还没有:你的问题是,XSL是一种本身是用XML编写的语言。对于所有 XML语言,解析器会自动解码XML实体。之后才出现XSLT引擎。

因此,XSLT引擎既不会也不能区分您是写'还是&#039; - 它们是相同的。对于您的问题,这有两个影响:

  1. 您必须使用包含该对象的变量 - 这是因为撇号本身是为可能包含函数的表达式中的字符串文字保留的。即使对于<xsl:value-of select="translate(products_name/node(),$and,'&#039;')"/>,XML解析器也会将实体转换为撇号,即<xsl:value-of select="translate(products_name/node(),$and,''')"/>

  2. 您必须转义您搜索的字符串中使用的&符号:对于XSL引擎,变量“and”包含值',即您用撇号替换撇号。 / p>

  3. 工作解决方案:

    <xsl:variable name="apos">'</xsl:variable>
    <xsl:value-of select='translate(text(), "&amp;#039;", $apos)'/>
    

答案 1 :(得分:1)

从技术上讲,&apos;&#39;&#x27;之间的任何XML都没有区别,它们是表示完全相同的事物的不同方式。因此,translate调用不应该执行任何操作。

这取决于你如何转换它,输出的位置(属性值或元素?),以及输出如何序列化为文本,但问题不在于你的XSLT。