我有以下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>
是否有功能或其他机制来执行此操作?
答案 0 :(得分:2)
选择任何“FOR XML”都会转义任何预先存在的XML,这样它就不会破坏XmlDocument的一致性。您提供的第一个示例行被认为是不正确形成的XML,并且无法由XmlDocument对象以及大多数解析器加载。我会考虑重组您正在尝试做的事情,以便您可以获得更有效的解决方案。
答案 1 :(得分:1)
答案 2 :(得分:1)
您可以使用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
答案 3 :(得分:0)
让<[CDATA[ <div></div> ]]>
超过数据库输出中的<div></div>
会有什么好处?对我来说,看起来你在两种情况下都会在你的XML输出中有一个正确转义的HTML片段,并且用一个体面的XML解析器读回它应该在两种情况下都会给你未转义的原始版本。