这个问题是由开发人员 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/
我好像记得Lua有类似Ruby的method_missing的东西。还是我记错了? 最佳答案 表的metatable的__index和__newindex可以用于与Ruby的method_missing相同的效果。 关于ruby-难道Lua没有和Ruby的method_missing相媲美的东西吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7732154/
我有一个奇怪的问题:我在rvm上安装了rubyonrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(
我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re
大家好!我想知道Ruby中未使用语法ClassName.method_name调用的方法是如何工作的。我头脑中的一些是puts、print、gets、chomp。可以在不使用点运算符的情况下调用这些方法。为什么是这样?他们来自哪里?我怎样才能看到这些方法的完整列表? 最佳答案 Kernel中的所有方法都可用于Object类的所有对象或从Object派生的任何类。您可以使用Kernel.instance_methods列出它们。 关于没有类的Ruby方法?,我们在StackOverflow
我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle
我在Rails应用程序中使用CarrierWave/Fog将视频上传到AmazonS3。有没有办法判断上传的进度,让我可以显示上传进度如何? 最佳答案 CarrierWave和Fog本身没有这种功能;你需要一个前端uploader来显示进度。当我不得不解决这个问题时,我使用了jQueryfileupload因为我的堆栈中已经有jQuery。甚至还有apostonCarrierWaveintegration因此您只需按照那里的说明操作即可获得适用于您的应用的进度条。 关于ruby-on-r
如何在Ruby中获取BasicObject实例的类名?例如,假设我有这个:classMyObjectSystem我怎样才能使这段代码成功?编辑:我发现Object的实例方法class被定义为returnrb_class_real(CLASS_OF(obj));。有什么方法可以从Ruby中使用它? 最佳答案 我花了一些时间研究irb并想出了这个:classBasicObjectdefclassklass=class这将为任何从BasicObject继承的对象提供一个#class您可以调用的方法。编辑评论中要求的进一步解释:假设你有对象
我在非Rails项目中使用ActiveRecord。在Rails中,我可以这样做:config.time_zone='EasternTime(US&Canada)'config.active_record.default_timezone='EasternTime(US&Canada)'但如果我不使用rails,我该如何设置时区? 最佳答案 ActiveRecord::Base.default_timezone='EasternTime(US&Canada)' 关于ruby-没有轨道的A
目录第1题连续问题分析:解法:第2题分组问题分析:解法:第3题间隔连续问题分析:解法:第4题打折日期交叉问题分析:解法:第5题同时在线问题分析:解法:第1题连续问题如下数据为蚂蚁森林中用户领取的减少碳排放量iddtlowcarbon10012021-12-1212310022021-12-124510012021-12-134310012021-12-134510012021-12-132310022021-12-144510012021-12-1423010022021-12-154510012021-12-1523.......找出连续3天及以上减少碳排放量在100以上的用户分析:遇到这类
我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时