如何让SQL查询无法转义查询中返回的HTML数据

时间:2009-12-22 17:22:23

标签: sql xml sql-server-2005

我有以下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">&lt;![CDATA[&lt;DIV&gt;&lt;DIV Style="width:55%;float:left;"&gt;In</str>

是否有功能或其他机制来执行此操作?

4 个答案:

答案 0 :(得分:2)

选择任何“FOR XML”都会转义任何预先存在的XML,这样它就不会破坏XmlDocument的一致性。您提供的第一个示例行被认为是不正确形成的XML,并且无法由XmlDocument对象以及大多数解析器加载。我会考虑重组您正在尝试做的事情,以便您可以获得更有效的解决方案。

答案 1 :(得分:1)

使用EXPLICIT模式XML查询时,可以指定将输出视为CDATA。参见:

Using EXPLICIT Mode

Example: Specifying the CDATA Directive

答案 2 :(得分:1)

您可以使用for xml explicitcdata指令:

select
   1 as tag,
   null as parent,
   AanID as [str!1!name],
   Answer as [str!1!!cdata]
from AuditAnswers
for xml explicit

答案 3 :(得分:0)

<[CDATA[ <div></div> ]]>超过数据库输出中的&lt;div&gt;&lt;/div&gt;会有什么好处?对我来说,看起来你在两种情况下都会在你的XML输出中有一个正确转义的HTML片段,并且用一个体面的XML解析器读回它应该在两种情况下都会给你未转义的原始版本。