一尘不染

CDATA部分真的没有必要吗?

sql

由于开发人员Michael Rys拒绝将CDATA节的解析包含到FOR XML
PATH中,因此引发了这个问题,因为“您存储的数据没有语义差异”。

我已经在CDATA节点和其他需要使用特殊字符或笨拙字符的内容中存储了HTML块。但是,我觉得没有资格挑战Rys的有争议的主张,因为我认为,从技术上讲,在我为了方便起见使用CDATA的情况下,他是正确的。

真正令我吃惊的是,当开发人员在互联网上乞求有关如何使用FOR XML PATH呈现CDATA段的建议时,受访者不断指示他们使用FOR XML
EXPLICIT,而XML呈现方法Rys引用为“查询”。来自地狱”。

如果我们真的可以在每个用例中都没有CDATA的情况下有人提出,我想我们应该停止抱怨,并从此拒绝CDATA的使用。但是,如果在明确定义了CDATA必不可少的情况下,Rys已经保证他会将其放入FOR
XML PATH中,此问题中最顶层的链接将继续进行。

那到底是什么呢?CDATA部分真的是过去的遗迹吗?还是Rys应该伸出手指允许在FOR XML
PATH中进行CDATA解析?同时,在此期间,是否存在用于FOR XML PATH返回CDATA部分的任何技巧?


阅读 123

收藏
2021-05-30

共1个答案

一尘不染

CDATA 如果您不关心数据中的数据的语义(例如,您无需解析它-它只是一系列字符),并且您不希望转义其中的任何XML,则各节将非常有用。

根据w3的定义:

CDATA节可能出现在字符数据可能出现的任何地方;它们用于转义包含字符的文本块,否则这些字符将被视为标记。

来自维基百科

XML文档的新作者经常误解CDATA节的目的,错误地认为它的目的是在处理过程中“保护”数据,使其不被视为普通字符数据。一些用于处理XML文档的API确实提供了用于独立访问CDATA节的选项,但是这些选项存在于XML处理系统的正常要求之上和之外,并且仍然不会更改数据的隐含含义。字符数据是字符数据,无论它是通过CDATA节还是通过普通标记表示的。

CDATA节对于将XML代码作为XML文档中的文本数据编写很有用。例如,如果希望用XSL排版一本书来解释XML应用程序的使用,那么出现在书本中的XML标记将被写入CDATA部分的源文件中。但是,CDATA节不能包含字符串“]]>”,因此CDATA节不可能包含嵌套的CDATA节。使用CDATA节来编码包含三元组“]]>”的文本的首选方法是通过在“>”之前拆分出现的三元组来使用多个CDATA节。例如,要编码“]]>”,应这样写:

2021-05-30