- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
这个问题是由开发人员 Michael Rys 相当激进地拒绝将 CDATA 部分的解析包含到 FOR XML PATH 中引起的,因为 "There is no semantic difference in the data that you store."
我在 CDATA 节点和其他需要使用特殊或笨拙字符的内容中存储了 HTML block 。但是,我觉得没有资格挑战 Rys 有争议的断言,因为我认为,从技术上讲,在我为方便起见而使用 CDATA 的情况下,他是正确的。
真正让我吃惊的是,当开发人员在互联网上征求有关如何使用 FOR XML PATH 呈现 CDATA 段的建议时,受访者不断指示他们改用 FOR XML EXPLICIT,the XML rendering method Rys cited as being the "query from hell".
如果我们真的可以在任何人都可以建议的每个用例中不用 CDATA,我想我们应该停止提示并从此拒绝使用 CDATA。但是,如果有明确定义的情况,其中 CDATA 是必不可少的,Rys 已经 promise 他会将其烘焙到 FOR XML PATH 中,在这个问题的最上面的链接中前进。
那么它是什么? CDATA 部分真的是过去的遗物吗?或者 Rys 应该拔出他的手指并允许在 FOR XML PATH 中进行 CDATA 解析吗?与此同时,我们是否有任何技巧可以让 FOR XML PATH 返回 CDATA 部分?
最佳答案
CDATA 部分是不必要的。它们不是“过去的遗物”,因为它们一直都是不必要的。
这并不意味着它们没有用。看看任何编程语言或库,你会发现很多你可以不用的东西,因为它们在语义上等同于其他东西,但如果有人坐在那里必须编写这些东西,它们就很有用。
就此而言,即使是程序化生产,也可以方便地采用相反的方法并为每个 c 数据片段使用 CDATA 部分(臃肿,但它可以在其他地方提高效率)。
FOR XML PATH 不需要坐在那里的人编写这些东西。它是一种从 SQL 查询的结果中生成有效 XML 的方法。 (这也不是解析 CDATA 部分的问题,而是生成它们的问题 - 另一回事)。
当您想要非常精细的控制时,您不能真正提示 FOR XML EXPLICIT 是替代方案 - FOR XML EXPLICIT 有时使用起来如此讨厌的原因恰恰是因为它为您提供了非常精细的控制。事实上,考虑一下他们是否首先添加了对 CDATA 部分的支持,然后添加了对其他所有调整和配置选项的支持,这些调整和配置选项对其他人来说似乎同样重要。在 FOR XML EXPLICIT 成为自动选择之前需要多长时间,因为它比 FOR XML PATH 更直接‽
CDATA 在四种情况下很有用:
有趣的是,这四种情况也是禁止接受 CDATA 部分有意义的四种情况。
案例 1 在这里不适用,它不是人为生成的代码。如果你正在做一些非常疯狂的事情,案例 2 可以适用于此。坦率地说,缺少 CDATA 部分是您最不担心的;切换到在查询中生成更简单的 XML 并将其转换到其他地方。案例 3 可以适用于此,但如果适用,向 SQL 人员提示是不公平的,而你应该向不处理 <example>
的损坏的 XML 解析器提示。与<![CDATA[<example>]]>
相同.案例 4 可以在这里应用,但再次向编写错误代码的人投诉,而不是 SQL 人员。
关于sql - CDATA 部分真的没有必要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4323928/
我正在使用 this solution在二进制矩阵中找到与图像边界对齐的矩形。假设现在我想找到一个不与图像边框对齐的矩形,并且我不知道它的方向;找到它的最快方法是什么? 为了示例,让我们寻找一个仅包含
else: 行在这个 Python 程序中是否正确/必要? from random import randrange for n in range(10): r = randrange(0,1
在 TDPL 7.1.5.1 中讨论了将 Widget w2 分配给 w1 并且作者指出“将 w2 逐个字段分配给 w1 会将 w2.array 分配给 w1.array——一个简单的数组边界分配,而
我是一名优秀的程序员,十分优秀!