如何获得SQL查询无法逃避查询HTML数据返回(How to get SQL query to no

2019-10-18 19:38发布

我有以下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>

是否有一个函数或其他机制来做到这一点?

Answer 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


Answer 2:

选择什么“FOR XML”逃脱任何预先存在的XML,以便它不会打破的XmlDocument的一致性。 你给我的第一个例子线被认为是不正确的XML,并且将无法通过如下的对象,以及大多数解析器加载。 我会考虑重组你想这样做,你可以有一个更有效的解决方案是什么。



Answer 3:

您可以指定输出作为CDATA使用明确的模式,XML查询时处理。 看到:

使用显式模式

例如:指定CDATA指令



Answer 4:

这将是具有的益处<[CDATA[ <div></div> ]]>在具有&lt;div&gt;&lt;/div&gt; 在你的数据库输出? 对我来说,它看起来像你将有一个在这两种情况下,你的XML输出正确转义HTML片段,并读一个体面的XML解析器应该给你在这两种情况下的转义原始版本。



文章来源: How to get SQL query to not escape HTML data returned in query