无效 XML 字符:处理 xml 时出现 xslt 错误
Invalid XML character : xslt error while processing xml
在使用 xslt 处理 xml 时,出现以下错误,但我在 xml
中看不到这些字符
Character reference "" is an invalid XML character.
Character reference "" is an invalid XML character.
Character reference "" is an invalid XML character.
Character reference "" is an invalid XML character.
Character reference "" is an invalid XML character.
Character reference "" is an invalid XML character.
Character reference "" 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"?>
.
在使用 xslt 处理 xml 时,出现以下错误,但我在 xml
中看不到这些字符Character reference "" is an invalid XML character.
Character reference "" is an invalid XML character.
Character reference "" is an invalid XML character.
Character reference "" is an invalid XML character.
Character reference "" is an invalid XML character.
Character reference "" is an invalid XML character.
Character reference "" 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"?>
.