由于解析某些XML数据时出现了一些解析器错误,我查看了XML标准d,以确定真正允许的是什么。我目前的疑虑是在标签<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]在这种情况下,需要在内容中转义相当多的字符?
发布于 2014-01-08 08:39:58
我们友好的维基百科有一节专门讨论这个问题。我认为这个解释要简单得多。http://en.wikipedia.org/wiki/XML#Escaping
有效字符
以下范围的Unicode代码点在XML1.0文档中是有效的:9
XML 1.110扩展了允许的字符集,包括上述所有字符,加上U+0001-U+001F范围内的其余字符。但是,同时,它限制了C0和C1控制字符的使用,而不是U+0009、U+000A、U+000D和U+0085,要求它们以转义形式编写(例如,必须将U+0001写成或类似的)。对于C1字符,此限制是向后不兼容的;引入此限制是为了允许检测常见的编码错误。
代码点U+0000是任何XML1.0或1.1文档中唯一不允许的字符。
逃逸
XML提供转义功能,用于包含难以直接包含的字符。例如:
- non-breaking space ( ) " "
- compare space ( ) " "
- Cyrillic Capital Letter A (А) "А"
- compare Latin Capital Letter A (A) "A"
有五个预定义的实体:
所有允许的Unicode字符都可以用数字字符引用表示。考虑一下汉字"中",它在Unicode中的数字代码是十六进制4E2D,或十进制20,013。键盘无法输入此字符的用户仍然可以将其插入以中或中方式编码的XML文档中。类似地,字符串"I <3 J rg“可以编码为"I <3 J rg”,以便包含在XML文档中。
但是,"�“是不允许的,因为空字符是从XML中排除出来的控制字符之一,即使使用数字字符引用也是如此。14需要一种替代的编码机制(如�)来表示这些字符。
https://stackoverflow.com/questions/20990431
复制相似问题