Привет, у меня есть образцы данных в SOAP XML
DECLARE @xml XML = '<soapenv:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<ns0:Context xmlns:ns0="http://service.PUBG.com/entity/message/2007/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<messageId>N455D</messageId>
<refToMessageId>142323</refToMessageId>
<Timestamp>2018-08-08T23:00:11.282Z</Timestamp>
<applicationId>PUBG</applicationId>
<hostName>UNKNOWN</hostName>
</ns0:Context>
</soap:Header>
<soap:Body xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<ns2:searchResponseResponse xmlns:ns2="http://service.PubG.com/provider/gpow/bankLookup/PubGLookUpService/2013/" xmlns:ns4="http://service.PubG.com/provider/gpow/bankLookup/PubGLookUpService/2015/">
<ns4:PubGDetails>
<ns4:Name>PUBG Roll</ns4:Name>
</ns4:PubGDetails>
<ns4:PubGCode>xxxxxxx</ns4:PubGCode>
<ns4:countryCode>US</ns4:countryCode>
<ns4:address>
<ns4:physicalAddress1>XXX PARK AVENUE</ns4:physicalAddress1>
</ns4:address>
<ns4:zipCode>123456</ns4:zipCode>
<ns4:countryName>USA</ns4:countryName>
<ns4:parentPubGCode>0</ns4:parentPubGCode>
<ns4:modificationInd>A</ns4:modificationInd>
<ns4:modificationDate>2017-05-02</ns4:modificationDate>
</ns2:searchResponseResponse>
</soap:Body>
';
Я написал такой код, чтобы получить в формате таблицы:
;WITH XMLNAMESPACES ('http://schemas.xmlsoap.org/soap/envelope/' AS soap,
'http://service.PubG.com/provider/gpow/bankLookup/PubGLookUpService/2013/' AS ns2,
'http://service.PubG.com/provider/gpow/bankLookup/PubGLookUpService/2015/' AS ns4,
'http://service.PUBG.com/entity/message/2007/' as ns0), rs AS
(
SELECT col.value('(soap:Header/ns0:Context/messageId)[1]','VARCHAR(20)') AS messageId
, col.value('(soap:Header/ns0:Context/refToMessageId)[1]','VARCHAR(20)') AS refToMessageId
, col.value('(soap:Header/ns0:Context/Timestamp)[1]','DATE') AS [Timestamp]
, col.value('(soap:Header/ns0:Context/applicationId)[1]','VARCHAR(20)') AS applicationId
, col.value('(soap:Header/ns0:Context/hostName)[1]','VARCHAR(20)') AS hostName
, col.value('(soap:Body/ns2:searchResponseResponse/ns4:PubGDetails/ns4:Name)[1]','VARCHAR(20)') AS PubGDetails
, col.value('(soap:Body/ns2:searchResponseResponse/ns4:PubGCode)[1]','VARCHAR(20)') AS PubGCode
, col.value('(soap:Body/ns2:searchResponseResponse/ns4:countryCode)[1]','VARCHAR(20)') AS countryCode
, col.value('(soap:Body/ns2:searchResponseResponse/ns4:address/ns4:physicalAddress1)[1]','VARCHAR(20)') AS [Address]
, col.value('(soap:Body/ns2:searchResponseResponse/ns4:zipCode)[1]','VARCHAR(20)') AS zipCode
, col.value('(soap:Body/ns2:searchResponseResponse/ns4:countryName)[1]','VARCHAR(20)') AS countryName
, col.value('(soap:Body/ns2:searchResponseResponse/ns4:parentPubGCode)[1]','VARCHAR(20)') AS parentPubGCode
, col.value('(soap:Body/ns2:searchResponseResponse/ns4:modificationInd)[1]','VARCHAR(20)') AS modificationInd
, col.value('(soap:Body/ns2:searchResponseResponse/ns4:modificationDate)[1]','DATE') AS modificationDate
FROM @xml.nodes('/soap:Envelope') AS tab(col)
)
SELECT * FROM rs;
Iполучаю ошибку, как это:
Msg 9455, Level 16, State 1, Line 1
XML parsing: line 4, character 2, illegal qualified name character
Как получить вывод, как это:
messageId refToMessageId Timestamp applicationId hostName PubGDetails PubGCode countryCode address zipCode countryName parentPubGCode modificationInd modificationDate
N455D 142323 8/8/2018 PUBG UNKNOWN PUBG Roll xxxxxxxxx us XXX PARK AVENUE 123456 USA 0 A 5/2/2017