I'm having difficulty querying this XML with a namespace. I can query the xml without the namespace fine.
Below is my attempt. It results in 0 records.
;WITH XMLNAMESPACES ('http://www.google.com/kml/ext/2.2' as gx)
,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 altitudeModetext.node.value('.','NVARCHAR(255)') AS altitudeMode,
gdcoordtext.node.value('.','NVARCHAR(255)') AS gdcoord,
whentext.node.value('.','NVARCHAR(255)') AS [when]
FROM CTE
CROSS APPLY BulkColumnXML.nodes('/kml/Document/Placemark/gx:Track') as kmlDocumentPlacemarkopengxtrack(node)
CROSS APPLY kmlDocumentPlacemarkopengxtrack.node.nodes('altitudeMode/text()') as altitudeModetext(node)
CROSS APPLY kmlDocumentPlacemarkopengxtrack.node.nodes('gx:coord/text()') as gdcoordtext(node)
CROSS APPLY kmlDocumentPlacemarkopengxtrack.node.nodes('when/text()') as whentext(node)
Corrected Code by adding default namespace into with namespaces clause:
;WITH XMLNAMESPACES ('http://www.google.com/kml/ext/2.2' as gx,
DEFAULT 'http://www.opengis.net/kml/2.2')
,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 altitudeModetext.node.value('.','NVARCHAR(255)') AS altitudeMode,
gdcoordtext.node.value('.','NVARCHAR(255)') AS gdcoord,
whentext.node.value('.','NVARCHAR(255)') AS [when]
FROM CTE
CROSS APPLY BulkColumnXML.nodes('/kml/Document/Placemark/gx:Track') as kmlDocumentPlacemarkopengxtrack(node)
CROSS APPLY kmlDocumentPlacemarkopengxtrack.node.nodes('altitudeMode/text()') as altitudeModetext(node)
CROSS APPLY kmlDocumentPlacemarkopengxtrack.node.nodes('gx:coord/text()') as gdcoordtext(node)
CROSS APPLY kmlDocumentPlacemarkopengxtrack.node.nodes('when/text()') as whentext(node)
DEFAULT 'http://www.opengis.net/kml/2.2'.