试图在这里说出一个不同的问题...如何查询下面的xml,我发现我无法将其成功转换为XML来提出问题。
以下是我的尝试
;WITH CTE AS
( SELECT CONVERT(XML,N'
<?xml version='1.0' encoding='UTF-8'?>
<kml xmlns='http://www.opengis.net/kml/2.2' xmlns:gx='http://www.google.com/kml/ext/2.2'>
<Document>
<Placemark>
<open>1</open>
<gx:Track>
<altitudeMode>clampToGround</altitudeMode>
<when>2017-10-26T11:42:05Z</when>
<gx:coord>Lat Long Altitude</gx:coord>
<when>2017-10-26T11:41:40Z</when>
<gx:coord>Lat Long Altitude</gx:coord>
</gx:Track>
</Placemark>
</Document>
</kml>'
) AS BulkColumnXML
)
SELECT *
FROM CTE
错误是:
Msg 9438,Level 16,State 1,Line 16
XML解析:第2行,第6个字符,text / xmldecl不在输入的开头
我不确定我做错了什么,如果删除名称空间声明,转换就可以了。
正确代码:
;WITH CTE AS
( SELECT CONVERT(XML,'<?xml version=''1.0'' encoding=''UTF-8''?>
<kml xmlns=''http://www.opengis.net/kml/2.2'' xmlns:gx=''http://www.google.com/kml/ext/2.2''>
<Document>
<Placemark>
<open>1</open>
<gx:Track>
<altitudeMode>clampToGround</altitudeMode>
<when>2017-10-26T11:42:05Z</when>
<gx:coord>Lat Long Altitude</gx:coord>
<when>2017-10-26T11:41:40Z</when>
<gx:coord>Lat Long Altitude</gx:coord>
</gx:Track>
</Placemark>
</Document>
</kml>'
) AS BulkColumnXML
)
SELECT *
FROM CTE
答案 0 :(得分:2)
看起来你的XML prolog之前有空格。按如下方式重新格式化CTE:
;WITH CTE AS
( SELECT CONVERT(XML,
N'<?xml version="1.0" encoding="UTF-8"?>
. . .
普通XML在根元素之前可以有空格,但在XML Prolog之前必须没有数据。