我必须把一个坏的字符改成引号,但我不能逃避最后这个。
这样做是行不通的
<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,"¿", "'")'/>
有什么好办法吗?
试试这个方法。
<xsl:value-of select='replace(input, "¿", "'")'/>
在XPath 2.0+中, 你可以在一个用引号限定的字符串中用双倍的引号转义. 所以试试。
''''
当你在XSLT中的XPath中使用正则表达式时,你需要仔细考虑转义问题。为什么这个字符需要转义?
如果它在正则表达式中具有特殊的含义(例如'(')),那么就使用反斜杠。
如果因为XPath规则而不允许(比如这里),使用XPath转义(写入 'O'Neil'
作为 'O''Neil'
或 "a="3""
作为 "a=""3"""
)
如果因为XML规则而不被允许(如"<"),则使用XML转义(写下 <
作为 <
)
这样做行不通的原因是,XML解析器将字符串文字化中的撇号视为标记字符串值的结束。
<xsl:value-of select='fn:replace(prog:intitules/prog:intitule_fr,"¿", "'")'/>
是因为XML解析器将字符串文字中的省略号当作是对字符串中的 select
属性。所以这里你有一个XML问题,根据规则3,你因此需要使用XML转义 ('
)
假设你的文件是utf-8编码,你可以尝试一个变通方法,使用Unicode的 撇号 字符 2BC
)而不是 引用 (十六进制 27
):
<xsl:value-of select="fn:replace(prog:intitules/prog:intitule_fr,'¿', 'ʼ')"/>
Edited: 再找找看,我发现换成了 '
和 "
并使用实体 '
将会得到同样的结果,正如Michael.hor257k同时提出的那样。
<xsl:value-of select='fn:replace(prog:intitules/prog:intitule_fr,"¿", "'")'/>