Не удается получить значение из openxml, когда элемент имеет атрибут xmlns - PullRequest
1 голос
/ 28 июня 2009

Атрибут xmlns в следующем коде мешает мне получить нужное мне значение. Хорошо работает с любым другим атрибутом, но не с xmlns. У меня нет контроля над XML, который мне дают - как я могу получить значение 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

1 Ответ

0 голосов
/ 28 июня 2009

Я вообще не знаю OpenXML, но этот FAQ , кажется, имеет ответ. По сути, это потому, что у вас есть элементы в определенном пространстве имен (из-за атрибута xlmns), поэтому вы должны иметь возможность указывать одно и то же пространство имен в вашем запросе.

Преобразование этого к вашей конкретной проблеме, я думаю, вы хотите:

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
...