【问题标题】:replace special characters xml file替换特殊字符xml文件
【发布时间】:2011-03-02 20:34:20
【问题描述】:

我每天都会收到一个通过 XSLT 进程运行的 XML;但是,偶尔的特殊字符会导致此中断。我正在寻找一些实用程序来清理 XML 并用正确的 html 数字编码替换特殊字符。只需要一个实用程序或一个想法。

来自 cmets 的更新

XML 有时会包含一个 ¢ 等特殊字符 比¢ 所以我需要一种改变的方法 标签的特殊字符

【问题讨论】:

  • 你能发个样本吗?如果它是有效的 XML,它不应该破坏您的 XSLT。你确定它是有效的吗?
  • XML 有时会包含一个特殊字符,例如 ¢ 而不是 ¢所以我需要一种将特殊字符更改为标签的方法。所以偶尔它是无效的。我只需要一些东西来遍历 XML 并将其与几个文本文件或其他东西进行比较。
  • 那么它是 not 有效的 XML。您需要从源中获取有效的 XML。
  • 正是...它是 3p 软件生成 xml,所以这就是为什么我需要某种类型的清理实用程序
  • 解决了这个问题使用 XSLT 中称为字符映射的功能比使用实用程序或创建额外脚本效果更好

标签: xml xslt


【解决方案1】:

如果您的 XSLT 代码无法处理此输入 XML,那么输入实际上不是 XML,或者您将其不正确地呈现给 XSLT 处理器。最可能的解释是文件的编码不是文件开头的 XML 声明所说的那样;或者可能没有 XML 声明,因此处理器假定为 UTF-8,但它实际上是 iso-8859-1。解决方案可能很简单,只需在文件开头添加 XML 声明以将编码声明为 iso-8859-1。

【讨论】:

  • 我最近遇到了这个问题;正确设置编码。
【解决方案2】:

“特殊”字符(非 ASCII 的 Unicode 字符)是有效的 XML,因此您应该真正修复您的解析器。如果这不起作用,请通过以下过滤器管道您的代码:

#!/usr/bin/env python

import sys

input = sys.stdin.read().decode('UTF-8')
for c in input:
    sys.stdout.write('&#%04d;' % ord(c) if c >= 128 else c)

UTF-8 替换为文档的编码。将以上代码保存到xmlentities,调用like

python xmlentities <broken.xml >fixed.xml

【讨论】:

    【解决方案3】:

    我无法重现此问题

    这个样式表:

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:template match="node()|@*">
            <xsl:copy>
                <xsl:apply-templates select="node()|@*"/>
            </xsl:copy>
        </xsl:template>
    </xsl:stylesheet>
    

    有了这个输入:

    <t>¢</t>
    

    输出:

    <?xml version="1.0" encoding="UTF-16"?>
    <t>¢</t>
    

    【讨论】:

      猜你喜欢
      • 2013-01-27
      • 1970-01-01
      • 2018-12-13
      • 2019-05-23
      • 1970-01-01
      • 2011-12-28
      • 1970-01-01
      相关资源
      最近更新 更多