2009-06-28 7 views
0

L'attribut xmlns du code suivant m'empêche d'obtenir la valeur dont j'ai besoin. Fonctionne bien avec tout autre attribut mais pas xmlns. Je n'ai aucun contrôle sur le XML que je reçois - comment puis-je obtenir la valeur CrpId?Impossible d'obtenir la valeur d'openxml lorsque l'élément a l'attribut xmlns

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 

Répondre

0

Je ne sais pas moi-même OpenXML du tout, mais this FAQ semble avoir la réponse. Fondamentalement, c'est parce que vous avez des éléments dans un espace de noms particulier (en raison de l'attribut xlmns), vous devez donc être en mesure de spécifier le même espace de noms dans votre requête.

La conversion de ce à votre problème particulier, je pense que vous voulez:

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 
Questions connexes