fn:replace函数的转义字符是什么

问题描述 投票:0回答:3

我必须把一个坏的字符改成引号,但我不能逃避最后这个。

这样做是行不通的

<xsl:value-of select="fn:replace(prog:intitules/prog:intitule_fr,'¿', '\'')"/>

它产生net.sf.saxon.trans.XPathException。表达式中的不匹配引号同样的错误也出现在双转义或三转义'\'或'\'中。

我的编辑器拒绝这种替代语法。

<xsl:value-of select='fn:replace(prog:intitules/prog:intitule_fr,"¿", "'")'/>

有什么好办法吗?

xslt xpath saxon
3个回答
0
投票

试试这个方法。

<xsl:value-of select='replace(input, "¿", "&apos;")'/>

0
投票

在XPath 2.0+中, 你可以在一个用引号限定的字符串中用双倍的引号转义. 所以试试。

''''

当你在XSLT中的XPath中使用正则表达式时,你需要仔细考虑转义问题。为什么这个字符需要转义?

  • 如果它在正则表达式中具有特殊的含义(例如'(')),那么就使用反斜杠。

  • 如果因为XPath规则而不允许(比如这里),使用XPath转义(写入 'O'Neil' 作为 'O''Neil'"a="3"" 作为 "a=""3""")

  • 如果因为XML规则而不被允许(如"<"),则使用XML转义(写下 < 作为 &lt;)

这样做行不通的原因是,XML解析器将字符串文字化中的撇号视为标记字符串值的结束。

<xsl:value-of select='fn:replace(prog:intitules/prog:intitule_fr,"¿", "'")'/>

是因为XML解析器将字符串文字中的省略号当作是对字符串中的 select 属性。所以这里你有一个XML问题,根据规则3,你因此需要使用XML转义 (&apos;)


-1
投票

假设你的文件是utf-8编码,你可以尝试一个变通方法,使用Unicode的 撇号 字符 2BC)而不是 引用 (十六进制 27):

<xsl:value-of select="fn:replace(prog:intitules/prog:intitule_fr,'¿', '&#x2BC;')"/>

Edited: 再找找看,我发现换成了 '" 并使用实体 &apos; 将会得到同样的结果,正如Michael.hor257k同时提出的那样。

<xsl:value-of select='fn:replace(prog:intitules/prog:intitule_fr,"¿", "&apos;")'/>
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.