由于在解析某些(据称的)XML数据时出现了一些解析器错误,因此我查看了XML standar以找出真正允许的内容。我当前的疑虑是关于允许进入标记<bla>some content</bla>
的内容的内容,即允许some content
包含的内容。
我在第2.4节:
CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*)
表示“不包含<
,&
或]]>
的每个字符序列。但是,[^<&]
实际上在哪个字符集上运行?是它是完整的Unicode范围(afaik#0x0000,无论如何),或者它是2.2节中的Char
定义:
Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
在哪种情况下,需要在内容中转义相当多的字符?
答案 0 :(得分:0)
我们友好的维基百科有一节致力于此。我认为解释更简单。 http://en.wikipedia.org/wiki/XML#Escaping
以下范围内的Unicode代码点在XML 1.0中有效 文件:[9]
- U + 0009,U + 000A,U + 000D:这些是XML中唯一接受的C0控件 1.0;
- U + 0020-U + D7FF,U + E000-U + FFFD:这排除了BMP中的一些(不是全部)非字符(所有代理,U + FFFE和U + FFFF都是 禁止的);
- U + 10000-U + 10FFFF:这包括所有代码点 辅助飞机,包括非人物。
XML 1.1 [10]将允许的字符集扩展为包含所有字符 以上,加上U + 0001-U + 001F范围内的剩余字符。在 但同时,它限制了C0和C1控制的使用 U + 0009,U + 000A,U + 000D和U + 0085以外的字符要求 它们以转义形式写成(例如U + 0001必须写成 作为?或其等价物)。在C1字符的情况下,这个 限制是向后不相容的;它被引入允许 要检测的常见编码错误。
代码点U + 0000是唯一不允许使用的字符 任何XML 1.0或1.1文档。
XML提供了包含字符的转义工具 有问题直接包括在内。例如:
- 字符“&lt;”和“&amp;”是关键的语法标记,可能永远不会出现在CDATA部分之外的内容中。[13]
- 某些字符编码仅支持Unicode的一个子集。例如,以ASCII编码XML文档是合法的,但ASCII 缺少Unicode字符的代码点,例如“é”。
- 可能无法在作者的机器上输入字符。
某些字符的字形无法在视觉上区别于其他字符:示例
不间断的空格()“”
比较space()“”
Cyrillic Capital Letter A(А)“А”
比较拉丁文大写字母A(A)“A”
有五个预定义的实体:
- &LT;代表“&lt;”
- &GT;代表“&gt;”
- &安培;代表“&amp;”
- '代表'
- “代表”
所有允许的Unicode字符都可以用数字表示 字符参考。考虑中文字符“中”,其数字 Unicode中的代码是十六进制4E2D或十进制20,013。一个用户 键盘提供无法输入此字符的方法 将其插入编码为中或中的XML文档中。 类似地,字符串“I&lt;3Jörg”可以被编码以包含在 XML文档为“I&lt;3Jörg”。
但是,“ ”是不允许的,因为空字符是其中之一 控制字符从XML中排除,即使使用数字也是如此 字符参考。[14]另一种编码机制,如 需要Base64来表示这些字符。