【问题标题】:Use CDATA in SQL server 2012在 SQL Server 2012 中使用 CDATA
【发布时间】: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


【解决方案1】:

当涉及 XML 数据类型时,您似乎无法保留 CDATA。见https://stackoverflow.com/a/9133622/864696

【讨论】:

  • 感谢您的回复
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多