我想知道是否有任何方法可以]]>在xml文档的CDATA部分中转义CDATA结束标记().或者,更一般地说,如果在CDATA中使用某些转义序列(但如果它存在,我想它可能只有在逃避开始或结束令牌时才有意义).
基本上,您是否可以在CDATA中嵌入开始或结束标记,并告诉解析器不要解释它,而是将其视为另一个字符序列.
可能你应该重构你的xml结构或你的代码,如果你发现自己试图这样做,但即使我在过去3年左右每天都在使用xml而且我从来没有遇到过这个问题,我想知道是否有可能.只是出于好奇.
编辑:
除了使用html编码...
当我使用For Explicit在Sql Server 2008 R2中生成Xml(因为我的消费者想要CDATA中包含的元素之一)并将结果存储在Xml变量中时,我想要包装在CDATA标记中的数据不再包含在CDATA标记中.如果我不将For Xml Explicit结果推送到Xml变量中,则保留CDATA标记.我使用@Xml变量作为.Net的SqlParameter.
在这个例子中,第一选择(选择@xml)并没有有2号线包裹在CDATA标签.但是第二个选择(用于填充@Xml变量的相同查询)确实包含了包装Line2列的CDATA标记.
Declare @Xml Xml
Begin Try
Drop Table #MyTempTable
End Try
Begin Catch
End Catch
Select
'Record' As Record
, 'Line1' As Line1
, 'Line2' As Line2
Into
#MyTempTable
Select @Xml =
(
Select
x.Tag
, x.Parent
, x.[Root!1]
, x.[Record!2!Line1!Element]
, x.[Record!2!Line2!cdata]
From
(
Select
1 As Tag, Null As Parent
, Null As [Root!1]
, Null As [Record!2!Line1!Element]
, Null As [Record!2!Line2!cdata]
From
#MyTempTable
Union
Select
2 …Run Code Online (Sandbox Code Playgroud)