以下代码中的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
答案 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