在使用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文本文件构成。
答案 0 :(得分:2)
CSV文件可能包含这些非法字节,并且在没有任何内容验证的情况下形成XML(即CSV文件的内容已经逐字节地复制到XML中。) 以下是一些选项:&#
之后的数字是十进制格式的ASCII代码(&#x
将指定十六进制格式的代码)。这些代码,16,4,18等不指定任何可打印字符,但它们是默认情况下通常在文本编辑器中不可见的控制字符。
答案 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"?>
。