【问题标题】:Which are the safest ways to accented characters in xsl transformations?在 xsl 转换中重音字符最安全的方法是什么?
【发布时间】:2018-03-21 01:44:57
【问题描述】:

我的老板告诉我要确定这一点,因为角色得到奇怪输出的可能性很小,比如 'solución' 输出 'soluci&3n'。

有些词需要重读,就是xsl中的原始代码,就这么简单:

<table:table-cell table:style-name="TablaIkus.FXI" office:value-type="string">
                    <text:p text:style-name="PIntBodyLeft">Fecha inicio cómputo intereses</text:p>
                </table:table-cell>

问题是,输出在最终的 .odt 文件中正确显示了单词:

但是,以防万一... 有一个函数可以转义重音以避免奇怪的输出?

【问题讨论】:

  • 我写这篇评论是为了获得更新并出现在最新的问题上“我不知道这是否可行”
  • 不清楚你在问什么。 XML 为每个字符提供多种语义等价的表示。您是否询问在源文档中使用哪些表示?关于在样式表文档中使用哪个?也许关于如何影响结果文档中出现的表示形式?
  • 您好,感谢您的回复。好吧,我不是英语本地人,我试图以我能做的最佳方式提出问题。我说的是所有重音符号 áàéèíìóòúù,以及这些重音符号的大写字母,以及在 .odt 文档上显示输出的最佳方式,以显示完全相同的“áàéèíìóòúù”,从而避免可能出现的问题。

标签: xslt transformation odt


【解决方案1】:

你说得对,重音字符仍然会出错。我们仍然存在基于 Web 的表单中的重音字符以及电子邮件中的重音字符的问题。如果一切配置正确,一切都会正常工作,但您并不总是能控制一切,而且有很多机会出错。

&amp;#243; 这样的数字字符引用是防止不正确转码的一种方法,但它们的问题是它们无法通过XSLT 转换(或许多其他XML 处理操作)。在 XSLT 代码中(以及在 Javascript 中)我已经开始使用类似的结构

&lt;xsl:variable name="nbsp" select="codepoints-to-string(160)"/&gt;

【讨论】:

    【解决方案2】:

    但是,以防万一... 有一个函数可以转义重音以避免奇怪的输出?

    XML 将几乎所有的 Unicode 作为其字符集。重音字符不需要特殊处理,通常在 XML 中,特别是在 XSLT 中。因此,不,没有转义重音或重音字符的功能,也不需要。

    但是,您的问题掩盖了误解。正如我在 cmets 中所写的,XML 提供了多种语义等价的方式来表示同一个字符。这适用于您的 XML 输入文档、样式表文档和输出方法“xml”的结果文档。例如,如果文档编码支持它,那么字符 ó(“LATIN SMALL LETTER O WITH ACUTE”,正如 Unicode 命名的那样)可以直接通过它在文档字符编码中的表示来传达,但它也可以等效地,以两种形式之一表示为 XML 字符实体:&amp;#xf3;&amp;#243;

    如果 XSLT 处理器输出的 XML 包含与输入中使用的字符不同的某些字符表示,则它不会提交任何错误。在某些情况下,它实际上可能需要这样做。如果它确实执行了这样的转换,那么它不会因此以任何方式改变文档的含义。听起来您想避免此类转换,但这不是您应该担心的问题。

    但是,请确保您的输入和样式表文档在其 XML 声明中准确地声明其字符编码。例如,

    <?xml version="1.1" encoding="UTF-8"?>
    

    如果您的文档没有 XML 声明或者没有声明编码,那么请确保它们是使用 XML 的默认编码 UTF-8 进行编码的。向您的 XML 工具歪曲编码确实是您文档中的字符可能被打乱的一种方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      相关资源
      最近更新 更多