Ho la seguente query SQL:Interrogazione tipi di dati XML che hanno il nodo xmlns attributi
DECLARE @XMLDOC XML
SET @XMLDOC = '<Feed><Product><Name>Foo</Name></Product></Feed>'
SELECT x.u.value('Name[1]', 'varchar(100)') as Name
from @XMLDOC.nodes('/Feed/Product') x(u)
Ciò restituisce:
Name
----
Foo
Tuttavia, se il mio nodo <Feed>
ha un attributo xmlns
, allora questo doesn Non restituire alcun risultato:
DECLARE @XMLDOC XML
SET @XMLDOC = '<Feed xmlns="bar"><Product><Name>Foo</Name></Product></Feed>'
SELECT x.u.value('Name[1]', 'varchar(100)') as Name
from @XMLDOC.nodes('/Feed/Product') x(u)
Resi:
Name
----
Questo succede solo se ho un attributo xmlns
, qualsiasi altra cosa funziona correttamente.
Perché è questo e come posso modificare la query SQL per restituire i risultati indipendentemente dagli attributi?
+1 C'è un modo per ignorare semplicemente xmlns? Avevo la tentazione di convertire il tipo di dati 'XML' in una stringa, rimuovere l'attributo xmlns e quindi richiamarlo ... – Curt
Non mi interessa davvero lo spazio dei nomi, e questo è un feed di terze parti con versioning sul xmlns URL, quindi è soggetto a modifiche esterne – Curt
@Curt: no, quando lo spazio dei nomi XML è presente nel tuo XML, non puoi semplicemente ignorarlo - devi occupartene. Se si ha solo uno spazio dei nomi XML, utilizzare l'approccio n. 1 per definirlo come spazio dei nomi XML predefinito e che dovrebbe essere abbastanza semplice e immediato da utilizzare. –