Rob*_*cks 7 xml binary base64 cdata
而不是将二进制文件保存为Base64的开销,我想知道你是否可以直接将双字节二进制流存储到XML文件中,使用CDATA,或者将其注释掉,或者什么?
Pet*_*ham 12
Nul字符(C中的'\ 0')在XML中的任何位置都无效,即使是转义().
Kri*_*Dev 11
不,你不能单独使用CDATA在XML文件中注入二进制数据.
在XML1.0中(因为XML 1.1更宽松,但不是控制字符),以下限制适用于CDATA字符:
CData ::= (Char* - (Char* ']]>' Char*))
Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
Run Code Online (Sandbox Code Playgroud)
这意味着有几个字符是非法的,其中包括:
除此之外,在没有CDATA的标准实体内容中:
é可以,&zajdalkdza;不是)所以CDATA只是通过限制"]]>"来允许"<",">"和"&"的一种方式.它没有解决非法的XML,Unicode和UTF-8字符问题,这是主要问题.
解决方案:
XML 是一种纯文本格式 - 不要用它来存储二进制数据。将二进制 blob 放入单独的文件中,并向引用这些文件的 XML 添加一个元素。如果您想将所有二进制 blob 存储在单个文件中,请添加偏移量属性或类似的属性...
Joa*_*lva -1
您可以将其存储为 CDATA,但存在某些字节序列将评估为关闭 CDATA 部分的有效 XML 的风险。快速查看http://www.w3.org/TR/2006/REC-xml-20060816/#sec-cdata-sect后,似乎您可以拥有除“]]>”之外的任何字符序列。也看看什么是有效的 XML 字符。