我想知道您是否可以直接将双字节二进制流存储到 XML 文件中,使用 CDATA 或将其注释掉,而不是将二进制文件保存为 Base64的开销?
Jeremy Rudd
问问题
12950 次
4 回答
13
Nul 字符(C 中的 '\0' )在 XML 中的任何地方都无效,即使作为转义符( & #0; )也是如此。
于 2009-02-02T11:07:14.447 回答
13
不,您不能单独使用 CDATA 在 XML 文件中注入二进制数据。
在 XML1.0 中(因为 XML 1.1 更宽松,但不是关于控制字符),以下限制适用于 CDATA 字符:
CData ::= (Char* - (Char* ']]>' Char*))
Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
这意味着有几个字符是非法的,其中包括:
- 非法 XML 控制字符 0x00 到 0x20,换行符、回车符和制表符除外
- 非法 UTF-8 序列,如 0xFF 或非规范 0b1100000x 0b10xxxxxx
除此之外,在没有 CDATA 的标准实体内容中:
- “<”和“>”的使用是非法的
- “&”的使用受到限制(
é
可以,&zajdalkdza;
不是)
因此,CDATA 只是一种允许“<”、“>”和“&”的方式,而是通过限制“]]>”。它没有解决主要问题的非法 XML、Unicode 和 UTF-8 字符问题。
解决方案:
于 2013-07-05T09:35:35.127 回答
4
XML 是一种纯文本格式——不要用它来存储二进制数据。将二进制 blob 放在单独的文件中,并向引用这些文件的 XML 添加一个元素。如果要将所有二进制 blob 存储在单个文件中,请添加偏移属性或类似的东西...
于 2009-02-02T11:27:48.257 回答
-1
您可以将其存储为 CDATA,但存在某些字节序列将评估为关闭 CDATA 部分的有效 XML 的风险。快速浏览http://www.w3.org/TR/2006/REC-xml-20060816/#sec-cdata-sect后,您似乎可以使用除“]]>”之外的任何字符序列。看看什么是有效的 XML 字符。
于 2009-02-02T11:09:23.927 回答