使用xslt消除尖锐重音字符



我正试图在xslt 1.0.中消除或用一个简单的单引号字符替换尖锐重音字符。这是我迄今为止所尝试的,但没有一个能替换该字符。我的翻译结构可能出了什么问题?

<xsl:value-of select="translate(HeaderFields/Name,'#xb4','')"/>

<xsl:value-of select="translate(HeaderFields/Name,'0xb4','')"/>

<xsl:value-of select="translate(HeaderFields/Name,'´',''')"/>

尝试:

<xsl:value-of select='translate(HeaderFields/Name,"&#xb4;","&apos;")'/>

请注意双引号和单引号的交换-请参阅以下位置的说明:https://www.w3.org/TR/1999/REC-xpath-19991116/#section-简介

您可以将锐音符表示为'´'&#xb4;'#xb4''0xb4'都不正确。(你只是在猜测吗?(

表达一句话有点棘手。在XSLT2.0中,您可以将其写成'''',但这在1.0中不起作用。在1.0中,最好的方法是使用一个变量:

<xsl:variable name="apos">'</xsl:variable>
<xsl:value-of select="translate(HeaderFields/Name,'´',$apos)"/>

最后,您需要注意,锐音符可能不是独立的Unicode字符;它可能与它修改的字符组合在一起,因此例如á可以表示为单个代码点xE1。为了确保它是一个单独的字符,您需要将文本转换为分解的正常形式,这可以在2.0中使用normalize-unicode((函数来完成,但这在1.0中不可用。