Синтаксический анализ XML: получение ошибки из-за пустого узла в XML - PullRequest
0 голосов
/ 05 июля 2019

У меня есть xml, хранящийся в переменной.мой xml имеет один пустой узел, который не позволяет мне запускать код.когда я выполняю свой код выше, я получаю эту ошибку.

Сообщение 9436, Уровень 16, Состояние 1, Строка 2 Синтаксический анализ XML: строка 12, символ 15, конечный тег не соответствует начальному тегу

DECLARE @INPUTXML XML = 
'<Lineitems>
  <Lineitem>
    <Ticker>TER</Ticker>
    <ID>0</ID>
    <LineItem>Net Revenue</LineItem>
    <XFundCode>TRIN</XFundCode>
    <UserID>TDP</UserID>
  </Lineitem>
  <Lineitem>
    <Ticker>TER</Ticker>
    <ID>0</ID>
    </LineItem>
    <XFundCode>XXP</XFundCode>
    <UserID>TDP</UserID>    
  </Lineitem>
</Lineitems>';

DECLARE @Ticker  AS VARCHAR(MAX)
    , @ID        AS INT
    , @Lineitem  AS VARCHAR(MAX)
    , @XFundCode AS VARCHAR(MAX)
    , @UserID    AS VARCHAR(MAX);

-- count total number of items
DECLARE @i INT
    , @cnt INT = @INPUTXML.value('count(/Lineitems/Lineitem)', 'INT');

-- loop through XML item by item
SET @i = 1;
WHILE @i <= @cnt 
BEGIN

      SELECT @Ticker = col.value('(Ticker/text())[1]','VARCHAR(MAX)')
         , @ID = col.value('(ID/text())[1]','INT')
         , @Lineitem = nullif('',col.value('(LineItem/text())[1]','VARCHAR(MAX)'))
         , @XFundCode = col.value('(XFundCode/text())[1]','VARCHAR(MAX)')
         , @UserID = col.value('(UserID/text())[1]','VARCHAR(MAX)')
      FROM @INPUTXML.nodes('/Lineitems/Lineitem[position() = sql:variable("@i")]') AS tab(col);

      -- do whatever needed in the loop here
      Print @Lineitem

   SET @i += 1;
END
...