0

代码的相关部分:

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

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

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

(我使用变量是因为名称不能以 & 符号开头,并且仅使用撇号会导致编译错误。)

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

任何帮助将不胜感激。

4

2 回答 2

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”包含值',即您正在用撇号替换撇号。

工作解决方案:

<xsl:variable name="apos">'</xsl:variable>
<xsl:value-of select='translate(text(), "&amp;#039;", $apos)'/>
于 2011-07-11T14:16:09.513 回答
1

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

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

于 2011-07-11T14:16:54.363 回答