【问题标题】:how to perform FOR XML in SQL Query without column name如何在没有列名的 SQL 查询中执行 FOR XML
【发布时间】:2015-09-20 00:28:17
【问题描述】:

我在 select 语句中输出 XML 格式的响应。

XML 架构为:Placemark->MultiGeometry->Polygon-><more children> 我正在使用现有数据。

我正在运行的表,我们称之为 table1,有名称(varchar 数据类型)、样式(varchar 数据类型)和几何(XML 数据类型)

几何字段的值已经预先格式化了 xml。所有记录的每个值的根标记是 MultiGeometry。

这就是问题所在。

如果我执行:

select name, style, geometry from table1 
for xml path('Placemark'), ELEMENTS

我收到这个:

<Placemark>
      <Name>stuff</Name>
       <style>style stuff</style>
         <Geometry> 
            <MultiGeometry>...xml...</MultiGeometry>
         </Geometry>
</Placemark>

这使架构失败,因为架构(kml 架构)要求 MultiGeometry 是 PLacemark 内的子标记,并且架构无法识别 &lt;Geometry&gt; 标记。

我需要这个:

<Placemark>
    <Name>stuff</Name>
      <style>style stuff</style>
        <MultiGeometry>...xml...</MultiGeometry>
</Placemark>

但尝试:

select name, style, geometry as [ ] 
from table1 for xml path('Placemark'), ELEMENTS

查询失败。

如何在没有中间标签(例如&lt;Geometry&gt;)的情况下将 MultiGeometry 放入 Placemark 中?

非常感谢

【问题讨论】:

    标签: sql-server xml


    【解决方案1】:

    当然:

    select name, style, geometry.query('.')
    from table1
    for xml path('Placemark'), type, ELEMENTS;
    

    【讨论】:

    • 这是正确的答案 - 工作就像一个魅力。非常感谢。
    【解决方案2】:

    也许像.....

    SELECT CAST( 
              REPLACE(
                  REPLACE(CAST((select name, style, [Geometry]  AS [ReplaceMe]
                                from Table1 
                                 for xml path('Placemark'),ELEMENTS) AS VARCHAR(MAX))
                         , '<ReplaceMe>' , '')
                   , '</ReplaceMe>' , '') AS XML)
    

    【讨论】:

    • 我喜欢这个想法,但是,有时 XML 真的很大。我希望不必在其上运行功能。如果这真的是唯一的方法,那就这样吧。我会再坚持一段时间看看其他想法。
    猜你喜欢
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多