【发布时间】:2015-03-16 06:21:13
【问题描述】:
我正在尝试在 SQL Server 2012 中使用 CDATA 在 xml 中创建一个节点。我使用https://stackoverflow.com/a/1429383/4158652 中提供的代码。
有两个主要问题 1- 我的数据没有填充在 CDATA 中,即 instrtext 和 hinttext。 2- xml 中的额外道具节点
我一直使用的代码是
SET @instrProps =
(
select * from (
SELECT
1 AS Tag,
NULL AS Parent,
NULL AS 'props!1!instrtext!cdata',
NULL AS 'props!1!hinttext!cdata',
NULL AS 'props!1!score!Element'
UNION ALL
SELECT
1 AS Tag,
NULL AS Parent,
@instText,
@hintText,
@score
) X
FOR XML EXPLICIT, ROOT('props')
)
select @instrProps as DiplayNode
我希望节点是
<props>
<instrtext>
<![CDATA[TExt in this node]]>
</instrtext>
<hinttext>
<![CDATA[Text in thi node]]>
</hinttext>
<score>5.000</score>
</props>
但它就像来了
<props>
<props />
<props>
<instrtext>TExt in this node</instrtext>
<hinttext>TExt in this node</hinttext>
<score>5</score>
</props>
</props>
请帮忙。
【问题讨论】:
-
我试过这个,我注意到 CDATA 存在于
FOR XML EXPLICIT输出中,但在插入到 xml@instrProps变量时被删除。 -
CDATA 是人类可读的东西。许多机器 XML 处理器会将 CDATA 转换为编码的 XML。不幸的是,SQL Server 就是这样一种系统。幸运的是,生成的 XML 与 CDATA 值兼容(就计算机而言)不幸的是,人类阅读起来可能更加困难。
标签: sql sql-server xml