Mysql
 sql >> Base de données >  >> RDS >> Mysql

Impossible d'interroger le fichier XML avec OPENXML dans SQL

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)