2009-06-28 84 views
0

以下代碼中的xmlns屬性阻止了我獲取所需的值。適用於任何其他屬性,但不包括xmlns。我無法控制我得到的xml - 我如何獲得CrpId值?元素具有xmlns屬性時無法從openxml獲取值

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

我根本不知道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