Car*_*s S 13 xml escaping cdata
我正在使用从DB获取的值创建XML文档.有时候由于遗留实现,我会回调一个包含char的值,该值在未正确转义时(例如)无效.
所以问题就变成了,我应该CDATA还是Escape?某些情况对某一种情况更合适吗?
例子:
<Email>foo&bar@domain.com</Email>
Run Code Online (Sandbox Code Playgroud)
我在这里倾向于CDATA.
<Name>Bob & Tom</Name>
Run Code Online (Sandbox Code Playgroud)
我倾向于逃离这里.
我想每次都盲目地避免CDATA',但从性能的角度看,这似乎是合乎逻辑的选择.这总是比寻找一个无效的char更快,如果它存在,那么换行.
思考?
Edd*_*die 18
CDATA主要用于IMO,用于人类可读性.就机器而言,除了长度之外,CDATA和转义文本之间没有区别.也许转义的版本需要花费更长的时间才能处理,但我想也许,因为这不应该是一个重要因素,除非你的应用程序主要是IO绑定的.
人们可能正在阅读XML吗?如果没有,只需让XML解析器执行它所做的事情,不要担心CDATA vs转义文本.如果人们会阅读这个XML,那么CDATA可能是更好的选择.
如果您要使用值为XML的XML元素,那么对于这种情况,CDATA可能是更好的选择.
有关更多信息,请参阅XML FAQ的问题,我应该何时使用CDATA标记部分?
我已经看到人们使用CDATA进行上述操作是正常的,并且用于包装不是XML的东西 - 例如JSON或CSS - 这是使用它的更好理由.当人们使用它引用基于元素的标记(例如HTML)时会发生问题,然后就会发生混淆.
人们没想到
<![CDATA[<foo>bar</foo>]]>
Run Code Online (Sandbox Code Playgroud)
与...相同
<foo>bar</foo>
Run Code Online (Sandbox Code Playgroud)
就XML系统而言.
有关逃避级别的恐怖示例,请参阅RSS标签汤.
您还必须确保字符序列']]>'永远不会出现在您的包装数据中,因为它是终止符.
因此,除非可读性至关重要或者包装非元素标记,否则我建议避免使用CDATA.