У меня проблема с узлом под названием "siBikNetQuery" и следующими 3 внутри 'queryHeader'.Возникла проблема:
"Ошибка синтаксического анализа XML 0xc00ce553 произошла в строке номер 0, рядом с текстом XML" ". Msg 6602, Уровень 16, Состояние 2, Процедура sp_xml_preparedocument, Строка 1 [Пакетная строка запуска 1]Описание ошибки: «Следующие теги не были закрыты: SiBikNet, siBikNetQuery, creditInquiry, queryHeader, testDataMarker.». Сообщение 8179, уровень 16, состояние 5, строка 42 Не удалось найти подготовленный оператор с дескриптором 0. Сообщение 6607, уровень 16,Состояние 3, процедура sp_xml_removedocument, строка 1 [Batch Start Line 1] sp_xml_removedocument: значение, указанное для параметра номер 1, недопустимо. "
Понятия не имею, что здесь не так.
DECLARE @Handle AS INT; -- The handle of the XML data, passed to sp_xml_preparedocument
DECLARE @Xml AS NVARCHAR(1000); -- The XML document for this example
SET @Xml = N'
<SiBikNet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://www.ws.bik.pl/ws/ki/2v2/types">
<BIK_REQUEST xmlns="">
<consentDate>2018-08-04</consentDate>
<citizenshipStatus>citizen</citizenshipStatus>
<nationality>PL</nationality>
<pesel>123</pesel>
<documentType>idCard</documentType>
<documentId>CCH12</documentId>
<surname>xxx</surname>
<forename>yyy</forename>
<country>PL</country>
<postcode>11111</postcode>
<city>wqreewqw</city>
<street>wetww</street>
<houseNumber>23</houseNumber>
<localNumber>32</localNumber>
<numberOfParticipants>1</numberOfParticipants>
<applicationCurrency>PLN</applicationCurrency>
<creditAmount>2000</creditAmount>
<clientRelationToApplication>mainBorrower</clientRelationToApplication>
</BIK_REQUEST>
<siBikNetQuery xmlns="">
<creditInquiry>
<inquiryHeader>
<subscriberId>57000002</subscriberId>
<subscriberUnitId>57000002</subscriberUnitId>
<testDataMarker>false</testDataMarker>
</inquiryHeader>
</creditInquiry>
</siBikNetQuery>
</SiBikNet>';
EXEC sys.sp_xml_preparedocument @Handle OUTPUT , @Xml, N'<SiBikNet xmlns:t="https://www.ws.bik.pl/ws/ki/2v2/types"/>'; --Prepare a parsed document
SELECT *
FROM
OPENXML(@Handle,'/*[local-name()="SiBikNet"]', 2)
WITH ( consentDate NVARCHAR(10) '/*[local-name()="BIK_REQUEST"]',
citizenshipStatus NVARCHAR(10) '/*[local-name()="BIK_REQUEST"]',
nationality NVARCHAR(10) '/*[local-name()="BIK_REQUEST"]' ,
subscriberId NVARCHAR(10) '/*[local-name()="siBikNetQuery"]',
subscriberUnitId NVARCHAR(10) '/*[local-name()="siBikNetQuery"]',
testDataMarker NVARCHAR(10) '/*[local-name()="siBikNetQuery"]'
);
EXEC sys.sp_xml_removedocument @Handle;
Другая проблема заключается в том, что, когда я удаляю эти 3 строки из пути XML, ошибка исчезает, но я получаю значения NULL (есть проблема с путем для определенных атрибутов, я считаю):
DECLARE @Handle AS INT; -- The handle of the XML data, passed to sp_xml_preparedocument
DECLARE @Xml AS NVARCHAR(1000); -- The XML document for this example
SET @Xml = N'
<SiBikNet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://www.ws.bik.pl/ws/ki/2v2/types">
<BIK_REQUEST xmlns="">
<consentDate>2018-08-04</consentDate>
<citizenshipStatus>citizen</citizenshipStatus>
<nationality>PL</nationality>
<pesel>123</pesel>
<documentType>idCard</documentType>
<documentId>CCH12</documentId>
<surname>xxx</surname>
<forename>yyy</forename>
<country>PL</country>
<postcode>11111</postcode>
<city>wqreewqw</city>
<street>wetww</street>
<houseNumber>23</houseNumber>
<localNumber>32</localNumber>
<numberOfParticipants>1</numberOfParticipants>
<applicationCurrency>PLN</applicationCurrency>
<creditAmount>2000</creditAmount>
<clientRelationToApplication>mainBorrower</clientRelationToApplication>
</BIK_REQUEST>
<siBikNetQuery xmlns="">
<creditInquiry>
<inquiryHeader>
</inquiryHeader>
</creditInquiry>
</siBikNetQuery>
</SiBikNet>';
EXEC sys.sp_xml_preparedocument @Handle OUTPUT , @Xml, N'<SiBikNet xmlns:t="https://www.ws.bik.pl/ws/ki/2v2/types"/>'; --Prepare a parsed document
SELECT *
FROM
OPENXML(@Handle,'/*[local-name()="SiBikNet"]', 2)
WITH ( consentDate NVARCHAR(10) '/*[local-name()="BIK_REQUEST"]',
citizenshipStatus NVARCHAR(10) '/*[local-name()="BIK_REQUEST"]',
nationality NVARCHAR(10) '/*[local-name()="BIK_REQUEST"]' ,
subscriberId NVARCHAR(10) '/*[local-name()="siBikNetQuery"]',
subscriberUnitId NVARCHAR(10) '/*[local-name()="siBikNetQuery"]',
testDataMarker NVARCHAR(10) '/*[local-name()="siBikNetQuery"]'
);
EXEC sys.sp_xml_removedocument @Handle;