Impossibile ottenere valore da openxml quando l'elemento ha l'attributo xmlns

StackOverflow https://stackoverflow.com/questions/1055095

  •  20-08-2019
  •  | 
  •  

Domanda

L'attributo xmlns nel seguente codice mi impedisce di ottenere il valore di cui ho bisogno. Funziona bene con qualsiasi altro attributo ma non con xmlns. Non ho alcun controllo sul codice XML che mi viene dato: come posso ottenere il valore CrpId?

declare @CrpId int, @i int, @xml xml
set @xml = 
'<NewProgressReportResult xmlns="http://myDomain.com/crp">
<CrpId>2160</CrpId>
</NewProgressReportResult>'

exec sp_xml_preparedocument @i output, @xml

select 
CrpId
from openxml (@i, 'NewProgressReportResult', 2)
with (  
    CrpId int 'CrpId'
)

exec sp_xml_removedocument @i
È stato utile?

Soluzione

Non conosco affatto OpenXML, ma questa FAQ sembra avere la risposta. Fondamentalmente è perché hai elementi in un determinato spazio dei nomi (a causa dell'attributo xlmns), quindi devi essere in grado di specificare lo stesso spazio dei nomi nella tua query.

Convertendo questo al tuo problema particolare, penso che tu voglia:

declare @CrpId int, @i int, @xml xml
set @xml = 
'<NewProgressReportResult xmlns="http://myDomain.com/crp">
<CrpId>2160</CrpId>
</NewProgressReportResult>'

set @ns = '<root xmlns:ns="http://myDomain.com/crp"/>

exec sp_xml_preparedocument @i output, @xml, @ns

select 
CrpId
from openxml (@i, '[ns:NewProgressReportResult]', 2)
with (  
        [ns:CrpId] int 'CrpId'
)

exec sp_xml_removedocument @i
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top