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

时间:2016-02-25 18:04:49

标签: xml xslt xslt-2.0

在使用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文本文件构成。

4 个答案:

答案 0 :(得分:2)

&#之后的数字是十进制格式的ASCII代码(&#x将指定十六进制格式的代码)。这些代码,16,4,18等不指定任何可打印字符,但它们是默认情况下通常在文本编辑器中不可见的控制字符。

CSV文件可能包含这些非法字节,并且在没有任何内容验证的情况下形成XML(即CSV文件的内容已经逐字节地复制到XML中。)

以下是一些选项:

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

答案 1 :(得分:1)

这些是控制角色。不允许控制Unicode范围之外的字符和字符。这也意味着禁止调用例如字符实体

请参阅XML recommendation 1.0, §2.2 Characters

允许字符的全局列表是:

  

[2] Char :: =#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] / *任何Unicode字符,不包括代理块,FFFE和FFFF。 * /

答案 2 :(得分:1)

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

因此,摆脱它们的最简单方法是使用一种过滤掉它们的工具。使用linux,您可以使用the approach described here

答案 3 :(得分:1)

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