【问题标题】:How to retrieve XML that contains CDATA, from Database如何从数据库中检索包含 CDATA 的 XML
【发布时间】:2015-04-22 17:49:34
【问题描述】:

我需要检索以下格式的 XML

<mv>
  <v>!CDATA[[some_inner_xml_1]]</v>
  <v>!CDATA[[some_inner_xml_2]]</v>
</mv>

我刚刚了解到&lt;v /&gt; 中的数据将是其他一些 XML。当我认为数据将是一个整数时,我写了这个并且它起作用了

select IdentifierText as 'v' from ipmruntime.RecordsToExport where BatchID = 5 for xml path(''), Root('mv')

我试图使用语法'v!cdata' - 它不喜欢它。我不知道在哪里贴CDATA

我尝试了另一种语法

SELECT
    1 AS Tag,
    null AS Parent,
    IdentifierText as 'mv!1!v!cdata'
FROM ipmruntime.RecordsToExport
where BatchID = 5
FOR XML EXPLICIT, root('mv')

它几乎可以满足我的需要

<mv><mv><v><![CDATA[47f81be4-b54f-4703-840b-62b306c40842]]></v></mv><mv><v><![CDATA[3ba36a1f-bf75-4ed9-911e-26f10fba5587]]></v></mv></mv>

或者,如果我在同一个查询中使用'v!1',它会给我&lt;mv&gt;&lt;v&gt;&lt;/v&gt;&lt;v&gt;&lt;/v&gt;&lt;/mv&gt;,但是CDATA 去哪里了?

但这将每个&lt;v&gt; 包装成&lt;mv&gt;。显然,我不擅长 XML/SqlServer 组合...

【问题讨论】:

    标签: sql-server xml stored-procedures cdata


    【解决方案1】:

    你可以这样做:

    select 
       1    as Tag,
       null as Parent,
       IdentifierText as [v!1!!CDATA] --[tag name!tag type!tag attribute!other optional setting]
    from ipmruntime.RecordsToExport      
    where BatchID = 5 
    for xml explicit, root('mv') 
    

    【讨论】:

    • 谢谢。我查看了!!cdata 语法。它将 CDATA 放入 &lt;&gt; - &lt;mv&gt;&lt;v&gt;&lt;![CDATA[5]]&gt;&lt;/v&gt;&lt;v&gt;&lt;![CDATA[5]]&gt;&lt;/v&gt;&lt;/mv&gt;。这是正确的吗?
    • 我刚刚运行了这个测试 - SELECT MultiVal = TypeNode.value('(.)[1]', 'varchar(max)') FROM @XML.nodes('/mv/v') AS XTbl(TypeNode) - 它似乎与 &lt;&gt; 一起工作。请确认
    • @T.S.语法是:TAGNAME!TAGID!ATTRIBUTENAME[!..],在这种情况下,我们没有为&lt;v&gt;标签添加任何属性,这就是我们有TAGNAME!TAGID![!CDATA]的原因(方括号表示可选属性,在实际查询中应将其删除)
    猜你喜欢
    • 2016-09-24
    • 1970-01-01
    • 2014-09-22
    • 2023-01-19
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多