我对 XSL 比较陌生。我需要以特定方式处理特殊字符(BasicLatin 代码块之外的任何内容)。我知道实体代码和文字字符基本上是相同的,但是我需要在一个不这样看的文本编辑器中工作(这不在我的控制范围内)。因此,保留文字字符不是一种选择。如果可能的话,我想在我的 XSL 中而不是通过 Perl 或其他机制来处理这个问题。这是我所拥有的:
<p>This is a story—a long story.</p>
这是我想要的结果:
<p>This is a story<0x2014>a long story.</p>
我一直在尝试通过正则表达式来做到这一点,比如:
<xsl:value-of select="replace(., '(\P{IsBasicLatin})', 'concat('<0x', string-to-codepoints($1), '>'))"/>
但是我收到一个错误,即在数字文字之后需要一个分隔符。我无法找到任何我理解的有关该错误的文档。这与我尝试使用函数作为替换的一部分有关吗?XSL 允许这样的事情吗?如果没有,任何建议都将受到欢迎。我确实查看了此处提供的答案:convert character if codepoint within given range,这似乎相关但对我不起作用(第一个消除了我的特殊字符,第二个给了我非常奇怪的输出。)
任何帮助,将不胜感激。我想我错过了一些关于函数或代码点的东西,但我自己已经碰到了一些障碍。谢谢!