Проблема с разбором XML с несколькими узлами в SQL - PullRequest
0 голосов
/ 16 октября 2018

У меня проблема с узлом под названием "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; 
...