Il y a plusieurs défauts :
-
FROM OPENXML est obsolète et ne doit plus être utilisé (de rares exceptions existent)
-
votre XML incluait un espace de noms par défaut, qui doit être déclaré
-
votre XPath est erroné :
/Return/ReturnData/IRS990ScheduleHIRS990ScheduleH/
devrait être/Return/ReturnData/IRS990ScheduleH/
Mais de toute façon, vous devriez vous tourner vers le XQuery
moderne méthodes. Essayez comme ceci :
--Ceci lira le XML dans une variable déclarée.
--attention Votre XML est déclaré avec utf-8
, cela peut entraîner des problèmes avec les caractères spéciaux...
DECLARE @x xml
SELECT @x = R
FROM OPENROWSET (BULK 'C:\Users\USER\990\Example.xml', SINGLE_BLOB) AS ReturnData(R);
--Ceci est la requête, déclarez d'abord le ou les espaces de noms, puis utilisez .nodes()
et .value()
:
WITH XMLNAMESPACES(DEFAULT 'http://www.irs.gov/efile'
,'http://www.w3.org/2001/XMLSchema-instance' AS xsi)
SELECT ct.value('(FinancialAssistancePolicyInd)[1]','int') AS FinancialAssistancePolicyInd
,ct.value('(FPGReferenceDiscountedCareInd)[1]','int') AS FPGReferenceDiscountedCareInd
,ct.value('(FinancialAssistanceAtCostTyp/PersonsServedCnt)[1]','int') AS PersonsServedCnt
,ct.value('(FinancialAssistanceAtCostTyp/NetCommunityBenefitExpnsAmt)[1]','int') AS NetCommunityBenefitExpnsAmt
FROM @x.nodes('/Return/ReturnData/IRS990ScheduleH') AS A(ct)