Ignorer espace de noms XML en T-SQL

Comment puis-je supprimer/ignorer l'espace de noms XML dans un fichier xml lors de l'interrogation des données avec T-SQL?

Je suis le chargement d'un fichier xml dans une variable, et il fonctionne très bien. Mais le xml est un espace de jeu, et à moins que je le supprime, mes requêtes rien.

T-SQL:

DECLARE @xml xml
SELECT @xml = BulkColumn FROM OPENROWSET(BULK 'C:\myfile.xml', SINGLE_BLOB) AS A

SELECT X.z.value('ID[1]', 'VARCHAR(3)') FROM @xml.nodes('myroot/element') AS X(z)

Exemple XML:

<?xml version="1.0" encoding="utf-8"?>
<myroot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <element>
    <ID>1</ID>
  </element>
  <element>
    <ID>2</ID>
  </element>
  <element>
    <ID>3</ID>
  </element>
</myroot>

Cela fonctionne, la requête renvoie ceci:

1
2
3

Mais le XML contient également un espace de noms par défaut:

<myroot xmlns="http://XXX" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

La xmlns="http://XXX" complètement les vis jusqu'à ma requête. Et malheureusement manuellement modifier le xml avant le chargement, il n'est pas vraiment une option.

Questions:

  • Comment puis-je supprimer ou ignorer l'espace de noms lorsque je charge les données dans la variable?
  • Ou comment puis-je modifier ma requête pour gérer l'espace de noms?

OriginalL'auteur Jakob Gade | 2011-03-29