当element具有xmlns属性时,无法从openxml获取值

时间:2009-06-28 15:18:14

标签: openxml

以下代码中的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 :(得分:0)

我自己完全不了解OpenXML,但this 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