2015-09-20 32 views
2

我在select语句中输出XML格式的响应。如何在没有列名的SQL查询中执行FOR XML

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

我与运行表,让我们称之为表1,具有

几何字段的值已预格式化的名称(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是内标的子标签,并且架构无法识别<Geometry>标记。

我需要这样的:

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

但尝试:

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

无法查询。

如何在不带中间标签的情况下将MultiGeometry放置在地标中(例如<Geometry>)?

感谢很多

回答

0

也许像.....

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) 
+0

我喜欢这个主意,但是,有时XML是真正的大。我希望不必在其上运行功能。如果这确实是唯一的方法,那就这样吧。我将继续等待更长的时间来看其他想法。 – arcee123

1

肯定的:

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

这是正确的答案 - 像魅力一样工作。非常感激。 – edhubbell