2011-07-11 27 views
0

代码的相关部分:我怎样才能在XSLT转换成'撇号

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

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

我想这应该是一个简单的事情,上面的代码应该工作,但它不会影响在所有的输出。

(我用的变量,因为名称不能一个符号内开始在仅使用撇号带来了一个编译错误。)

我测试过的代码,以确保翻译使用字符串是工作,没有错误在那里。

任何帮助将不胜感激。

+0

'已经是一个撇号不是吗? –

+0

是的;我确实怀疑前面的'0'是否会把它当作八进制,但是我看到'9'并且做了一个自己的脸掌。 – Flynn1179

+0

是的,但字符串“&#039;”被显示而不是撇号。现在问题解决了,谢谢你的回应。 – dudledok

回答

2

您现在处于正确的轨道上,但目前还没有:您的问题是,XSL是一种使用XML编写的语言。对于全部 XML语言,解析器会自动解码XML实体。之后XSLT引擎才会出现。

因此,XSLT引擎既不会也不能区分您是否写入'&#039; - 它是一样的。对于您的问题,这有两个方面的影响:

  1. 你必须使用含有apostrope一个变量 - 这是因为单引号本身被保留在可能包含函数的表达式字符串文字。即使<xsl:value-of select="translate(products_name/node(),$and,'&#039;')"/>,XML解析器变换实体进入撇号,即<xsl:value-of select="translate(products_name/node(),$and,''')"/>

  2. 你要逃跑,你搜索的字符串中使用的符号:对于XSL引擎,变量“和”包含值',即你用撇号替换撇号。

工作液:

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

工作但不直接。我不得不把“&#039;”作为一个变量,否则我得到一个错误,但我的问题现在解决了。谢谢。 – dudledok

+0

好的,尽管我使用MSXSL 4.0进行了尝试和测试,但不同的引擎可能会对什么是有效的函数参数有不同的看法。 –

1

从技术上讲,有一个在&apos;&#39;&#x27;之间的任何XML没有什么区别,他们正好代表同一件事的不同方式。所以,那translate电话不应该做任何事情。

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