XML中确实允许使用字符

时间:2014-01-08 08:30:58

标签: xml

由于在解析某些(据称的)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]

在哪种情况下,需要在内容中转义相当多的字符?

1 个答案:

答案 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来表示这些字符。