【问题标题】:How can I decode XML hexadecimal entities into the corresponding character in XSLT?如何将 XML 十六进制实体解码为 XSLT 中的相应字符?
【发布时间】:2013-09-13 19:39:52
【问题描述】:

上下文

我正在使用 Apache Batik 处理字体文件,并使用 ttf2svg command 将字体转换为 SVG 文件。然而,Batik XML 给出的输出对初始的 -Chinese- 字形进行编码。

当前 XML

<glyph unicode="&#xf900;" glyph-name="null" horiz-adv-x="256" d="…" />

目标 XML

<glyph unicode="豈" glyph-name="null" horiz-adv-x="256" d="…"/>

XSL 模板

<xsl:template match="svg:glyph" mode="from-block">    
  <xsl:copy-of select="."  disable-output-escaping="yes" />
  <xsl:apply-templates />
</xsl:template>

问题

如何将 XML 十六进制实体解码为 XSLT 1.0 中的对应字符?

【问题讨论】:

  • 您能更好地解释需求的性质吗?是否有一些下游进程声称接受 XML 输入但不能处理数字字符引用?或者它只是一个装饰性要求:您希望您的 XML 使用 Unicode 字符,而不是对它们的数字引用?无论哪种情况,我都会编写一个简单的身份转换并指定输出编码应该是 UTF-8。 (但如果就这么简单,我想你不会问这个问题,因为解决方案是显而易见的。)
  • @C.M.Sperberg-McQueen 您如何指定 UTF-8 输出编码?
  • &lt;xsl:output encoding="UTF-8"/&gt;。目前还不清楚为什么你认为你需要在这里做任何事情。 Batik 生成的输出和您说想要的表单包含完全相同的信息,并且将由任何符合标准的 XML 解析器进行相同的处理。坚持特定的编码看起来有点像图腾主义。
  • 我知道 XML 实体代表字符,但人类使用字符而不是实体要容易得多
  • 是的。这是使用能够以扩展形式显示字符的 XML 感知编辑器的充分理由。

标签: xslt svg fonts hex xslt-1.0


【解决方案1】:

XSLT 2.0 解决方案

Michael Kay's answer on xslt: converting characters to their hexadecimal Unicode representation给出了一些关于hex→char问题解决的提示:

【讨论】:

    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 2020-11-11
    • 1970-01-01
    • 2014-10-25
    • 2020-01-18
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多