我有以下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
选择什么“FOR XML”逃脱任何预先存在的XML,以便它不会打破的XmlDocument的一致性。 你给我的第一个例子线被认为是不正确的XML,并且将无法通过如下的对象,以及大多数解析器加载。 我会考虑重组你想这样做,你可以有一个更有效的解决方案是什么。
您可以指定输出作为CDATA使用明确的模式,XML查询时处理。 看到:
使用显式模式
和
例如:指定CDATA指令
这将是具有的益处<[CDATA[ <div></div> ]]>
在具有<div></div>
在你的数据库输出? 对我来说,它看起来像你将有一个在这两种情况下,你的XML输出正确转义HTML片段,并读一个体面的XML解析器应该给你在这两种情况下的转义原始版本。