1

次のコードの 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
4

1 に答える 1

0

私自身、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
于 2009-06-28T15:23:57.713 に答える