如何获得SQL查询无法逃避查询
返回的HTML数据,我有以下SQL查询....如何获得SQL查询无法逃避查询
select AanID as '@name', '<![CDATA[' + Answer + ']]>' from AuditAnswers for XML PATH('str'), ROOT('root')
这奇妙的作品,但列“答案”,有时可有HTML标记它。该查询会自动从生成的XML中的“答案”列转义该HTML。我不想那样。我将把这个结果列包装在CDATA中,所以不需要转义。
我想要的结果是这个...
<str name="2"><![CDATA[<DIV><DIV Style="width:55%;float:left;">Indsfgsdfg]]></str>
,而不是这个......
<str name="2"><![CDATA[<DIV><DIV Style="width:55%;float:left;">In</str>
是否有一个函数或其他机制来做到这一点?
您可以使用for xml explicit
和cdata
指令:
select
1 as tag,
null as parent,
AanID as [str!1!name],
Answer as [str!1!!cdata]
from AuditAnswers
for xml explicit
在您的数据库输出中使用<[CDATA[ <div></div> ]]>
而不是<div></div>
有什么好处?对我来说,在这两种情况下,看起来你的XML输出中都会有一个正确转义的HTML片段,并且用一个体面的XML解析器阅读它会在两种情况下为你提供非转义的原始版本。
我不知道有什么好处,或者如果它的事项在所有。我做了一些其他的工作,其中CDATA标签之间的嵌入式标记已经使用'',所以我想删除<和>文本只是为了与以前的工作保持一致,但最终我认为它不会物。 – 2009-12-22 17:31:51
选择任何“FOR XML”都会转义任何预先存在的XML,以便它不会破坏XmlDocument的一致性。您给出的第一个示例行被认为是不正确的XML格式,并且不能被XmlDocument对象以及大多数解析器加载。我会考虑重组您想要做的事情,以便您可以拥有更高效的解决方案。
好像知道看起来像显式模式是我正在寻找的一些其他人提到的。谢谢(你的)信息。 – 2009-12-22 19:07:16
您可以指定在使用EXPLICIT模式XML查询时将输出视为CDATA。请参阅:
和
非常感谢您的联系。我不知道显式模式。 – 2009-12-22 19:08:03
有趣。我没有意识到这一点。这看起来像它会为我做的伎俩。 – 2009-12-22 19:06:07