无效 XML 字符:处理 xml 时出现 xslt 错误

Invalid XML character : xslt error while processing xml

在使用 xslt 处理 xml 时,出现以下错误,但我在 xml

中看不到这些字符
Character reference "&#16" is an invalid XML character.
Character reference "&#4" is an invalid XML character.
Character reference "&#4" is an invalid XML character.
Character reference "&#18" is an invalid XML character.
Character reference "&#1" is an invalid XML character.
Character reference "&#2" is an invalid XML character.
Character reference "&#25" is an invalid XML character.

请指教

xml 由具有 utf 8 字符编码的 csv 文本文件组成。

那些是控制字符。不允许使用控制字符和超出 Unicode 范围的字符。这也意味着调用例如字符实体  是被禁止的。

XML recommendation 1.0, §2.2 Characters

全局允许字符列表为:

[2] Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] /* any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. */

&#后面的数字是十进制格式的ASCII码(&#x会指定十六进制格式的代码)。这些代码 16、4、18 等没有指定任何可打印字符,但它们是默认情况下在文本编辑器中通常不可见的控制字符。 XML 中不允许使用这些字符或实际字节(除了少数例外),因此您的 XML 无效。

CSV 文件可能包含这些非法字节,XML 是在没有任何类型的内容验证的情况下形成的(即 CSV 文件的内容只是逐字节复制到 XML).

这里有一些选项:

  • 检查您的 XSLT 处理器是否可以配置为忽略这些非法字节。
  • 使用一些低级数据处理器自己清理这些字符,这些处理器只读取字节并从中删除所有非法字符。
  • 如果 csv-to-xml 转换在您的控制之下,请修复它以生成有效的 XML。
  • 如果是第三方应用程序,您应该向供应商请求修复。
  • 使用其他工具从 CSV 文件创建 XML。

这些是 non-printable ASCII control codes 范围从 0 或 1 到 31 十进制的 ASCII table。它们在文本编辑器中是不可见的,因此您看不到它们。如果您可以将编辑器切换到十六进制模式,您会发现 04h=4、12h=18d 等值紧挨着正常的 UTF-8(或其他)编码,例如 41h 对应 'A',42h 对应 'B'。

所以摆脱它们的最简单方法是使用过滤掉它们的工具。使用 linux 你可以使用 .

这些字符引用在 XML 1.1 中是合法的,但在 XML 1.0 中是不合法的。检查您使用的 XML 解析器是否支持 XML 1.1,以及文件顶部的 XML 声明是否指定 <?xml version="1.1"?>.