Reputation: 1
I am trying to import a publicly available set of data into an SQL Server DB. I am a newbie, and am struggling with this - spent most of today on this problem... It returns no results, no matter how much tweaking I do. The examples available online, I can follow (and work), but when I try to use the actual data I have, I get no results. Any help with this is much appreciated.
I am following the steps in the following URL :
The SQL I am using is as follows (my XML file is called D:\OpenXMLTesting.xml):
CREATE DATABASE OPENXMLTesting
GO
USE OPENXMLTesting
GO
CREATE TABLE XMLwithOpenXML
(
Id INT IDENTITY PRIMARY KEY,
XMLData XML,
LoadedDateTime DATETIME
)
INSERT INTO XMLwithOpenXML(XMLData, LoadedDateTime)
SELECT CONVERT(XML, BulkColumn) AS BulkColumn, GETDATE()
FROM OPENROWSET(BULK 'D:\OpenXMLTesting.xml', SINGLE_BLOB) AS x;
SELECT * FROM XMLwithOpenXML
DECLARE @XML AS XML, @hDoc AS INT, @SQL NVARCHAR (MAX)
SELECT @XML = XMLData FROM XMLwithOpenXML
EXEC sp_xml_preparedocument @hDoc OUTPUT, @XML
SELECT Id
FROM OPENXML(@hDoc, 'BizData/Pyld/Document/FinInstrmRptgRefDataRpt/RefData/FinInstrmGnlAttrbts')
WITH
(
Id [varchar](50) '@Id'
)
EXEC sp_xml_removedocument @hDoc
GO
The raw XML contains the following data :-
<?xml version="1.0" encoding="UTF-8"?>
-<BizData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:iso:std:iso:20022:tech:xsd:head.003.001.01" xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:head.003.001.01 head.003.001.01.xsd">
+<Hdr>
-<Pyld>
-<Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:iso:std:iso:20022:tech:xsd:auth.017.001.02" xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:auth.017.001.02 auth.017.001.02_ESMAUG_FULINS_1.1.0.xsd">
-<FinInstrmRptgRefDataRpt>
+<RptHdr>
-<RefData>
-<FinInstrmGnlAttrbts>
<Id>DE000C3JALS0</Id>
<FullNm>EAA3 SI 20211220 CS</FullNm>
<ShrtNm>EEX/EUAA P AUCTION SPOT</ShrtNm>
<ClssfctnTp>ITNXXX</ClssfctnTp>
<NtnlCcy>EUR</NtnlCcy>
<CmmdtyDerivInd>false</CmmdtyDerivInd>
</FinInstrmGnlAttrbts>
<Issr>529900J0JGLSFDWNFC20</Issr>
-<TradgVnRltdAttrbts>
<Id>XEER</Id>
<IssrReq>false</IssrReq>
<FrstTradDt>2015-03-25T06:00:00Z</FrstTradDt>
<TermntnDt>2021-12-20T23:59:59Z</TermntnDt>
</TradgVnRltdAttrbts>
-<DerivInstrmAttrbts>
<PricMltplr>500</PricMltplr>
-<AsstClssSpcfcAttrbts>
-<Cmmdty>
-<Pdct>
-<Envttl>
-<Emssns>
<BasePdct>ENVR</BasePdct>
<SubPdct>EMIS</SubPdct>
<AddtlSubPdct>EUAA</AddtlSubPdct>
</Emssns>
</Envttl>
</Pdct>
<TxTp>OTHR</TxTp>
<FnlPricTp>EXOF</FnlPricTp>
</Cmmdty>
</AsstClssSpcfcAttrbts>
</DerivInstrmAttrbts>
-<TechAttrbts>
<RlvntCmptntAuthrty>DE</RlvntCmptntAuthrty>
-<PblctnPrd>
<FrDt>2019-07-16</FrDt>
</PblctnPrd>
<RlvntTradgVn>XEER</RlvntTradgVn>
</TechAttrbts>
</RefData>
-<RefData>
-<FinInstrmGnlAttrbts>
<Id>DE000C3JALT8</Id>
<FullNm>T3PA SI 20211220 CS</FullNm>
<ShrtNm>EEX/EUA P AUCTION SPOT</ShrtNm>
<ClssfctnTp>ITNXXX</ClssfctnTp>
<NtnlCcy>EUR</NtnlCcy>
<CmmdtyDerivInd>false</CmmdtyDerivInd>
</FinInstrmGnlAttrbts>
<Issr>529900J0JGLSFDWNFC20</Issr>
-<TradgVnRltdAttrbts>
<Id>XEER</Id>
<IssrReq>false</IssrReq>
<FrstTradDt>2015-03-25T06:00:00Z</FrstTradDt>
<TermntnDt>2021-12-20T23:59:59Z</TermntnDt>
</TradgVnRltdAttrbts>
-<DerivInstrmAttrbts>
<PricMltplr>500</PricMltplr>
-<AsstClssSpcfcAttrbts>
-<Cmmdty>
-<Pdct>
-<Envttl>
-<Emssns>
<BasePdct>ENVR</BasePdct>
<SubPdct>EMIS</SubPdct>
<AddtlSubPdct>EUAE</AddtlSubPdct>
</Emssns>
</Envttl>
</Pdct>
<TxTp>OTHR</TxTp>
<FnlPricTp>EXOF</FnlPricTp>
</Cmmdty>
</AsstClssSpcfcAttrbts>
</DerivInstrmAttrbts>
-<TechAttrbts>
<RlvntCmptntAuthrty>DE</RlvntCmptntAuthrty>
-<PblctnPrd>
<FrDt>2019-07-16</FrDt>
</PblctnPrd>
<RlvntTradgVn>XEER</RlvntTradgVn>
</TechAttrbts>
</RefData>
-<RefData>
-<FinInstrmGnlAttrbts>
<Id>DE000F5PP026</Id>
<FullNm>SEME SI 20211220 CS</FullNm>
<ShrtNm>EEX/F 20211220</ShrtNm>
<ClssfctnTp>ITNXXX</ClssfctnTp>
<NtnlCcy>EUR</NtnlCcy>
<CmmdtyDerivInd>true</CmmdtyDerivInd>
</FinInstrmGnlAttrbts>
<Issr>529900J0JGLSFDWNFC20</Issr>
-<TradgVnRltdAttrbts>
<Id>XEER</Id>
<IssrReq>false</IssrReq>
<FrstTradDt>2015-03-25T06:00:00Z</FrstTradDt>
<TermntnDt>2021-12-20T23:59:59Z</TermntnDt>
</TradgVnRltdAttrbts>
-<DerivInstrmAttrbts>
<PricMltplr>1000</PricMltplr>
-<AsstClssSpcfcAttrbts>
-<Cmmdty>
-<Pdct>
-<Envttl>
-<Emssns>
<BasePdct>ENVR</BasePdct>
<SubPdct>EMIS</SubPdct>
<AddtlSubPdct>EUAE</AddtlSubPdct>
</Emssns>
</Envttl>
</Pdct>
<TxTp>OTHR</TxTp>
<FnlPricTp>EXOF</FnlPricTp>
</Cmmdty>
</AsstClssSpcfcAttrbts>
</DerivInstrmAttrbts>
-<TechAttrbts>
<RlvntCmptntAuthrty>DE</RlvntCmptntAuthrty>
-<PblctnPrd>
<FrDt>2018-12-04</FrDt>
</PblctnPrd>
<RlvntTradgVn>XEER</RlvntTradgVn>
</TechAttrbts>
</RefData>
-<RefData>
-<FinInstrmGnlAttrbts>
<Id>DE000F5PPQ38</Id>
<FullNm>SEMA SI 20211220 CS</FullNm>
<ShrtNm>EEX/F 20211220</ShrtNm>
<ClssfctnTp>ITNXXX</ClssfctnTp>
<NtnlCcy>EUR</NtnlCcy>
<CmmdtyDerivInd>true</CmmdtyDerivInd>
</FinInstrmGnlAttrbts>
<Issr>529900J0JGLSFDWNFC20</Issr>
-<TradgVnRltdAttrbts>
<Id>XEER</Id>
<IssrReq>false</IssrReq>
<FrstTradDt>2015-03-25T06:00:00Z</FrstTradDt>
<TermntnDt>2021-12-20T23:59:59Z</TermntnDt>
</TradgVnRltdAttrbts>
-<DerivInstrmAttrbts>
<PricMltplr>1000</PricMltplr>
-<AsstClssSpcfcAttrbts>
-<Cmmdty>
-<Pdct>
-<Envttl>
-<Emssns>
<BasePdct>ENVR</BasePdct>
<SubPdct>EMIS</SubPdct>
<AddtlSubPdct>EUAA</AddtlSubPdct>
</Emssns>
</Envttl>
</Pdct>
<TxTp>OTHR</TxTp>
<FnlPricTp>EXOF</FnlPricTp>
</Cmmdty>
</AsstClssSpcfcAttrbts>
</DerivInstrmAttrbts>
-<TechAttrbts>
<RlvntCmptntAuthrty>DE</RlvntCmptntAuthrty>
-<PblctnPrd>
<FrDt>2018-12-04</FrDt>
</PblctnPrd>
<RlvntTradgVn>XEER</RlvntTradgVn>
</TechAttrbts>
</RefData>
-<RefData>
-<FinInstrmGnlAttrbts>
<Id>DE000F5PPYW2</Id>
<FullNm>SEMC SI 20211220 CS</FullNm>
<ShrtNm>EEX/F 20211220</ShrtNm>
<ClssfctnTp>ITNXXX</ClssfctnTp>
<NtnlCcy>EUR</NtnlCcy>
<CmmdtyDerivInd>true</CmmdtyDerivInd>
</FinInstrmGnlAttrbts>
<Issr>529900J0JGLSFDWNFC20</Issr>
-<TradgVnRltdAttrbts>
<Id>XEER</Id>
<IssrReq>false</IssrReq>
<FrstTradDt>2015-03-25T06:00:00Z</FrstTradDt>
<TermntnDt>2021-12-20T23:59:59Z</TermntnDt>
</TradgVnRltdAttrbts>
-<DerivInstrmAttrbts>
<PricMltplr>1000</PricMltplr>
-<AsstClssSpcfcAttrbts>
-<Cmmdty>
-<Pdct>
-<Envttl>
-<Emssns>
<BasePdct>ENVR</BasePdct>
<SubPdct>EMIS</SubPdct>
<AddtlSubPdct>CERE</AddtlSubPdct>
</Emssns>
</Envttl>
</Pdct>
<TxTp>OTHR</TxTp>
<FnlPricTp>EXOF</FnlPricTp>
</Cmmdty>
</AsstClssSpcfcAttrbts>
</DerivInstrmAttrbts>
-<TechAttrbts>
<RlvntCmptntAuthrty>DE</RlvntCmptntAuthrty>
-<PblctnPrd>
<FrDt>2018-12-04</FrDt>
</PblctnPrd>
<RlvntTradgVn>XEER</RlvntTradgVn>
</TechAttrbts>
</RefData>
</FinInstrmRptgRefDataRpt>
</Document>
</Pyld>
</BizData>
Any help much appreciated.
Thanks
Upvotes: 0
Views: 399
Reputation: 22177
Few things to point out.
(1) Your XML was not well-formed, so I had to fix it.
(2) The article that you are referring to was relevant before SQL Server 2005 release. Starting from SQL Server 2005 onwards, it is using XQuery language, based on the w3c standards, to deal with the XML data type.
Microsoft proprietary OPENXML
and its companions sp_xml_preparedocument
and sp_xml_removedocument
are kept just for backward compatibility with obsolete SQL Server 2000. That's why use of the .nodes()
(3) Namespaces always shall be taken into account.
XML
<?xml version="1.0" encoding="UTF-8"?>
<BizData xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"
xmlns="urn:iso:std:iso:20022:tech:xsd:head.003.001.01"
xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:head.003.001.01 head.003.001.01.xsd">
<Hdr/>
<Pyld>
<Document xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"
xmlns="urn:iso:std:iso:20022:tech:xsd:auth.017.001.02"
xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:auth.017.001.02 auth.017.001.02_ESMAUG_FULINS_1.1.0.xsd">
<FinInstrmRptgRefDataRpt>
<RptHdr/>
<RefData>
<FinInstrmGnlAttrbts>
<Id>DE000C3JALS0</Id>
<FullNm>EAA3 SI 20211220 CS</FullNm>
<ShrtNm>EEX/EUAA P AUCTION SPOT</ShrtNm>
<ClssfctnTp>ITNXXX</ClssfctnTp>
<NtnlCcy>EUR</NtnlCcy>
<CmmdtyDerivInd>false</CmmdtyDerivInd>
</FinInstrmGnlAttrbts>
<Issr>529900J0JGLSFDWNFC20</Issr>
<TradgVnRltdAttrbts>
<Id>XEER</Id>
<IssrReq>false</IssrReq>
<FrstTradDt>20150325T06:00:00Z</FrstTradDt>
<TermntnDt>20211220T23:59:59Z</TermntnDt>
</TradgVnRltdAttrbts>
<DerivInstrmAttrbts>
<PricMltplr>500</PricMltplr>
<AsstClssSpcfcAttrbts>
<Cmmdty>
<Pdct>
<Envttl>
<Emssns>
<BasePdct>ENVR</BasePdct>
<SubPdct>EMIS</SubPdct>
<AddtlSubPdct>EUAA</AddtlSubPdct>
</Emssns>
</Envttl>
</Pdct>
<TxTp>OTHR</TxTp>
<FnlPricTp>EXOF</FnlPricTp>
</Cmmdty>
</AsstClssSpcfcAttrbts>
</DerivInstrmAttrbts>
<TechAttrbts>
<RlvntCmptntAuthrty>DE</RlvntCmptntAuthrty>
<PblctnPrd>
<FrDt>20190716</FrDt>
</PblctnPrd>
<RlvntTradgVn>XEER</RlvntTradgVn>
</TechAttrbts>
</RefData>
<RefData>
<FinInstrmGnlAttrbts>
<Id>DE000C3JALT8</Id>
<FullNm>T3PA SI 20211220 CS</FullNm>
<ShrtNm>EEX/EUA P AUCTION SPOT</ShrtNm>
<ClssfctnTp>ITNXXX</ClssfctnTp>
<NtnlCcy>EUR</NtnlCcy>
<CmmdtyDerivInd>false</CmmdtyDerivInd>
</FinInstrmGnlAttrbts>
<Issr>529900J0JGLSFDWNFC20</Issr>
<TradgVnRltdAttrbts>
<Id>XEER</Id>
<IssrReq>false</IssrReq>
<FrstTradDt>20150325T06:00:00Z</FrstTradDt>
<TermntnDt>20211220T23:59:59Z</TermntnDt>
</TradgVnRltdAttrbts>
<DerivInstrmAttrbts>
<PricMltplr>500</PricMltplr>
<AsstClssSpcfcAttrbts>
<Cmmdty>
<Pdct>
<Envttl>
<Emssns>
<BasePdct>ENVR</BasePdct>
<SubPdct>EMIS</SubPdct>
<AddtlSubPdct>EUAE</AddtlSubPdct>
</Emssns>
</Envttl>
</Pdct>
<TxTp>OTHR</TxTp>
<FnlPricTp>EXOF</FnlPricTp>
</Cmmdty>
</AsstClssSpcfcAttrbts>
</DerivInstrmAttrbts>
<TechAttrbts>
<RlvntCmptntAuthrty>DE</RlvntCmptntAuthrty>
<PblctnPrd>
<FrDt>20190716</FrDt>
</PblctnPrd>
<RlvntTradgVn>XEER</RlvntTradgVn>
</TechAttrbts>
</RefData>
<RefData>
<FinInstrmGnlAttrbts>
<Id>DE000F5PP026</Id>
<FullNm>SEME SI 20211220 CS</FullNm>
<ShrtNm>EEX/F 20211220</ShrtNm>
<ClssfctnTp>ITNXXX</ClssfctnTp>
<NtnlCcy>EUR</NtnlCcy>
<CmmdtyDerivInd>true</CmmdtyDerivInd>
</FinInstrmGnlAttrbts>
<Issr>529900J0JGLSFDWNFC20</Issr>
<TradgVnRltdAttrbts>
<Id>XEER</Id>
<IssrReq>false</IssrReq>
<FrstTradDt>20150325T06:00:00Z</FrstTradDt>
<TermntnDt>20211220T23:59:59Z</TermntnDt>
</TradgVnRltdAttrbts>
<DerivInstrmAttrbts>
<PricMltplr>1000</PricMltplr>
<AsstClssSpcfcAttrbts>
<Cmmdty>
<Pdct>
<Envttl>
<Emssns>
<BasePdct>ENVR</BasePdct>
<SubPdct>EMIS</SubPdct>
<AddtlSubPdct>EUAE</AddtlSubPdct>
</Emssns>
</Envttl>
</Pdct>
<TxTp>OTHR</TxTp>
<FnlPricTp>EXOF</FnlPricTp>
</Cmmdty>
</AsstClssSpcfcAttrbts>
</DerivInstrmAttrbts>
<TechAttrbts>
<RlvntCmptntAuthrty>DE</RlvntCmptntAuthrty>
<PblctnPrd>
<FrDt>20181204</FrDt>
</PblctnPrd>
<RlvntTradgVn>XEER</RlvntTradgVn>
</TechAttrbts>
</RefData>
<RefData>
<FinInstrmGnlAttrbts>
<Id>DE000F5PPQ38</Id>
<FullNm>SEMA SI 20211220 CS</FullNm>
<ShrtNm>EEX/F 20211220</ShrtNm>
<ClssfctnTp>ITNXXX</ClssfctnTp>
<NtnlCcy>EUR</NtnlCcy>
<CmmdtyDerivInd>true</CmmdtyDerivInd>
</FinInstrmGnlAttrbts>
<Issr>529900J0JGLSFDWNFC20</Issr>
<TradgVnRltdAttrbts>
<Id>XEER</Id>
<IssrReq>false</IssrReq>
<FrstTradDt>20150325T06:00:00Z</FrstTradDt>
<TermntnDt>20211220T23:59:59Z</TermntnDt>
</TradgVnRltdAttrbts>
<DerivInstrmAttrbts>
<PricMltplr>1000</PricMltplr>
<AsstClssSpcfcAttrbts>
<Cmmdty>
<Pdct>
<Envttl>
<Emssns>
<BasePdct>ENVR</BasePdct>
<SubPdct>EMIS</SubPdct>
<AddtlSubPdct>EUAA</AddtlSubPdct>
</Emssns>
</Envttl>
</Pdct>
<TxTp>OTHR</TxTp>
<FnlPricTp>EXOF</FnlPricTp>
</Cmmdty>
</AsstClssSpcfcAttrbts>
</DerivInstrmAttrbts>
<TechAttrbts>
<RlvntCmptntAuthrty>DE</RlvntCmptntAuthrty>
<PblctnPrd>
<FrDt>20181204</FrDt>
</PblctnPrd>
<RlvntTradgVn>XEER</RlvntTradgVn>
</TechAttrbts>
</RefData>
<RefData>
<FinInstrmGnlAttrbts>
<Id>DE000F5PPYW2</Id>
<FullNm>SEMC SI 20211220 CS</FullNm>
<ShrtNm>EEX/F 20211220</ShrtNm>
<ClssfctnTp>ITNXXX</ClssfctnTp>
<NtnlCcy>EUR</NtnlCcy>
<CmmdtyDerivInd>true</CmmdtyDerivInd>
</FinInstrmGnlAttrbts>
<Issr>529900J0JGLSFDWNFC20</Issr>
<TradgVnRltdAttrbts>
<Id>XEER</Id>
<IssrReq>false</IssrReq>
<FrstTradDt>20150325T06:00:00Z</FrstTradDt>
<TermntnDt>20211220T23:59:59Z</TermntnDt>
</TradgVnRltdAttrbts>
<DerivInstrmAttrbts>
<PricMltplr>1000</PricMltplr>
<AsstClssSpcfcAttrbts>
<Cmmdty>
<Pdct>
<Envttl>
<Emssns>
<BasePdct>ENVR</BasePdct>
<SubPdct>EMIS</SubPdct>
<AddtlSubPdct>CERE</AddtlSubPdct>
</Emssns>
</Envttl>
</Pdct>
<TxTp>OTHR</TxTp>
<FnlPricTp>EXOF</FnlPricTp>
</Cmmdty>
</AsstClssSpcfcAttrbts>
</DerivInstrmAttrbts>
<TechAttrbts>
<RlvntCmptntAuthrty>DE</RlvntCmptntAuthrty>
<PblctnPrd>
<FrDt>20181204</FrDt>
</PblctnPrd>
<RlvntTradgVn>XEER</RlvntTradgVn>
</TechAttrbts>
</RefData>
</FinInstrmRptgRefDataRpt>
</Document>
</Pyld>
</BizData>
SQL, method #1
-- DDL and sample population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, XMLData XML, LoadedDateTime DATETIME DEFAULT GETDATE());
INSERT INTO @tbl (XMLData)
SELECT TRY_CAST(BulkColumn AS XML) AS BulkColumn
FROM OPENROWSET(BULK 'e:\temp\OpenXMLTesting.xml', SINGLE_BLOB) AS x;
-- DDL and sample population, start
;WITH XMLNAMESPACES (DEFAULT 'urn:iso:std:iso:20022:tech:xsd:auth.017.001.02'
, 'urn:iso:std:iso:20022:tech:xsd:head.003.001.01' AS ns1)
SELECT c.value('(FinInstrmGnlAttrbts/Id/text())[1]','VARCHAR(30)') AS FinInstrmGnlAttrbts_Id
, c.value('(TradgVnRltdAttrbts/Id/text())[1]','VARCHAR(30)') AS TradgVnRltdAttrbts_Id
FROM @tbl AS tbl
CROSS APPLY tbl.xmldata.nodes('/ns1:BizData/ns1:Pyld/Document/FinInstrmRptgRefDataRpt/RefData') AS t(c);
SQL, method #2
-- Method #2, directly from the XML file as a virtual DB table on the file system
;WITH XMLNAMESPACES (DEFAULT 'urn:iso:std:iso:20022:tech:xsd:auth.017.001.02'
, 'urn:iso:std:iso:20022:tech:xsd:head.003.001.01' AS ns1), rs (xmldata) AS
(
SELECT TRY_CAST(BulkColumn AS XML) AS BulkColumn
FROM OPENROWSET(BULK 'e:\temp\OpenXMLTesting.xml', SINGLE_BLOB) AS x
)
SELECT c.value('(FinInstrmGnlAttrbts/Id/text())[1]','VARCHAR(30)') AS FinInstrmGnlAttrbts_Id
, c.value('(TradgVnRltdAttrbts/Id/text())[1]','VARCHAR(30)') AS TradgVnRltdAttrbts_Id
FROM rs AS tbl
CROSS APPLY tbl.xmldata.nodes('/ns1:BizData/ns1:Pyld/Document/FinInstrmRptgRefDataRpt/RefData') AS t(c);
Output
+------------------------+-----------------------+
| FinInstrmGnlAttrbts_Id | TradgVnRltdAttrbts_Id |
+------------------------+-----------------------+
| DE000C3JALS0 | XEER |
| DE000C3JALT8 | XEER |
| DE000F5PP026 | XEER |
| DE000F5PPQ38 | XEER |
| DE000F5PPYW2 | XEER |
+------------------------+-----------------------+
Upvotes: 1
Reputation: 8809
Unfortunately XML namespaces is one area where the Microsoft documentation on sp_xml_preparedocument
and OpenXML
is woefully lacking detail. All of the current examples show anonymous XML. The nodes
and query
documentations are much better in this regard.
The XML document you're trying to parse contains XML namespace declarations on the BizData and Document elements. You'll need to take those into account:
sp_xml_preparedocument
you'll need to supply an @xpath_namespaces
parameter, andOpenXML
you'll need to supply namespace prefixes in the XPath expression as well as the with
schema definitions.For example:
declare
@hDoc int,
@xml xml =
N'<BizData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:iso:std:iso:20022:tech:xsd:head.003.001.01" xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:head.003.001.01 head.003.001.01.xsd">
<Pyld>
<Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:iso:std:iso:20022:tech:xsd:auth.017.001.02" xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:auth.017.001.02 auth.017.001.02_ESMAUG_FULINS_1.1.0.xsd">
<FinInstrmRptgRefDataRpt>
<RefData>
<FinInstrmGnlAttrbts>
<Id>DE000C3JALS0</Id>
</FinInstrmGnlAttrbts>
</RefData>
</FinInstrmRptgRefDataRpt>
</Document>
</Pyld>
</BizData>';
-- Use sp_xml_preparedocument with an xpath namespaces declaration.
-- Here we define:
-- namespace prefix a = urn:iso:std:iso:20022:tech:xsd:head.003.001.01
-- namespace prefix b = urn:iso:std:iso:20022:tech:xsd:auth.017.001.02
-- REF: https://learn.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-xml-preparedocument-transact-sql
exec sp_xml_preparedocument
@hDoc output,
@xml,
N'<root xmlns:a="urn:iso:std:iso:20022:tech:xsd:head.003.001.01" xmlns:b="urn:iso:std:iso:20022:tech:xsd:auth.017.001.02" />'
-- Use OpenXML with namespace qualified paths.
-- i.e.: We use the 'a:' and 'b:' namespace prefixes defined in sp_xml_preparedocument to qualify the XPath expressions.
-- REF: https://learn.microsoft.com/en-us/sql/t-sql/functions/openxml-transact-sql
select *
from OpenXML(@hDoc, '/a:BizData/a:Pyld/b:Document/b:FinInstrmRptgRefDataRpt/b:RefData/b:FinInstrmGnlAttrbts')
with ( Id [varchar](50) 'b:Id' );
exec sp_xml_removedocument @hDoc;
Which yields the result:
Id
DE000C3JALS0
HTH.
Upvotes: 0