2009-12-22 64 views
1

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

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

回答

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 
+0

有趣。我没有意识到这一点。这看起来像它会为我做的伎俩。 – 2009-12-22 19:06:07

0

在您的数据库输出中使用<[CDATA[ <div></div> ]]>而不是&lt;div&gt;&lt;/div&gt;有什么好处?对我来说,在这两种情况下,看起来你的XML输出中都会有一个正确转义的HTML片段,并且用一个体面的XML解析器阅读它会在两种情况下为你提供非转义的原始版本。

+0

我不知道有什么好处,或者如果它的事项在所有。我做了一些其他的工作,其中CDATA标签之间的嵌入式标记已经使用'<' and '>',所以我想删除<和>文本只是为了与以前的工作保持一致,但最终我认为它不会物。 – 2009-12-22 17:31:51

2

选择任何“FOR XML”都会转义任何预先存在的XML,以便它不会破坏XmlDocument的一致性。您给出的第一个示例行被认为是不正确的XML格式,并且不能被XmlDocument对象以及大多数解析器加载。我会考虑重组您想要做的事情,以便您可以拥有更高效的解决方案。

+0

好像知道看起来像显式模式是我正在寻找的一些其他人提到的。谢谢(你的)信息。 – 2009-12-22 19:07:16