【问题标题】:Encoding special chars in XSLT output在 XSLT 输出中编码特殊字符
【发布时间】:2012-02-17 13:13:40
【问题描述】:

我已经构建了一组脚本,其中一部分将 XML 文档从一个词汇表转换为另一个词汇表中的文档子集。

出于对我来说不透明但显然不可协商的原因,目标平台(基于 Java)要求输出文档在 XML 声明中包含“encoding="UTF-8"”,但其中包含一些特殊字符文本节点必须使用其十六进制 unicode 值进行编码 - 例如'”' 必须替换为 '”' 等等。我无法获得必须对哪些字符进行编码的明确列表,但它似乎不像“所有非 ASCII”那么简单。

目前,我有一个可怕的 VBScript 使用 ADODB 在处理后直接检查输出文件的每一行,并在必要时替换字符。这速度非常慢,而且不出所料,有些角色会被遗漏(因此被目标平台攻击)。

虽然我可能会浪费时间“改进”VBScript,但长期目标是完全摆脱它,我确信必须有一种更快、更准确的方法来实现这一点,最好是在 XSLT 阶段自己。

谁能提出任何富有成效的调查途径?

(编辑:我不相信字符映射是答案 - 我以前看过它们,除非我弄错了,因为我的输入可能包含 any unicode 字符,我需要一张包含所有这些的地图除了我不想编码的那些......)

【问题讨论】:

    标签: unicode vbscript


    【解决方案1】:
    <xsl:output encoding="us-ascii"/>
    

    告诉序列化器它必须产生与 ASCII 兼容的输出。这应该迫使它为文本内容和属性值中的所有非 ASCII 字符生成字符引用。 (如果标签或属性名等其他地方有非ASCII,序列化会失败。)

    【讨论】:

      【解决方案2】:

      使用 XSLT 2.0,您可以使用字符映射标记您的帖子,请参阅 http://www.w3.org/TR/xslt20/#character-maps

      【讨论】:

      • 感谢您的回复。我不相信字符映射 - 我以前看过它们(将编辑我的帖子以提及这一点),除非我弄错了,因为我的输入可能包含 any unicode 字符,我需要一张包含所有这些的地图除了我不想编码的那些......
      • 确实,字符映射需要列出您要编码的字符,但如果您当前有一个 VBScript 执行该任务,那么我不明白为什么您不能设置字符映射反而。或者您当前的算法如何决定是否对字符进行编码?
      • 目前,我检查每个字符是否符合我最好的正则表达式(尽管有点知情!)猜测哪些字符不应该被编码,然后编码如果没有匹配项。
      • 嗯,这听起来好像字符映射没有帮助。而且整个描述有点模糊,据我所知,带有 Xerces 的 Java 平台具有完全支持 Unicode 和 UTF-8 的 XML 解析器,所以除了使用 XML 解析器避免问题之外,我不知道还有什么建议做任何 XML 解析器应该做的事情,即支持 Unicode。
      • 恐怕我对目标平台只有模糊的了解(但这完全是另一回事......)。您的建议是完全正确的,但据我所知,该系统不进行任何 XML 解析,而是将所需的 XML 文档视为纯文本。遗憾的是,对该系统的更改似乎完全不在讨论范围内。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-26
      • 2017-09-21
      相关资源
      最近更新 更多