Как читать атрибуты в файле XML, используя узлы в SQL - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь прочитать ВСЕ элементы из этого XML, используя узлы, но мне просто удается вернуть только самый первый или ни одного из них со следующими примерами.

Какпрочитать весь список?

Файл может содержать сотни тысяч.

XML-файл

<data source="1" target="0">
  <list item_nb="1">
    <co id="1" constitution="20190612101007" item_nb="44046">
      <item cm="640001000101" obu="00007E" vc="2" vrn="SOLD" />
      <item cm="640001000101" obu="00009D" vc="6" vrn="04D11797" />
      <item cm="640001000101" obu="0000A3" vc="2" vrn="FAULTY" />
      <item cm="640001000101" obu="00018B" vc="2" vrn="07D54084" />
      <item cm="640001000101" obu="0001A6" vc="6" vrn="000422" />
      <item cm="640001000101" obu="0001B2" vc="2" vrn="90D24430" />
      <item cm="640001000101" obu="0001B3" vc="2" vrn="03LS1592" />
      <item cm="640001000101" obu="0001B9" vc="6" vrn="FAULTYJUNE15" />
       </co>
  </list>
</data>

Мой код в SQL (возвращает только первый элемент)

declare @X xml;
select @X = T.MY_XML
from openrowset(bulk 'C:\XML\IEA.1.20190612101007-WL.XML', single_blob) as T(MY_XML)
select
   MY_XML.Item.value('(item/@cm)[1]', 'VARCHAR(20)'),
   MY_XML.Item.value('(item/@obu)[1]', 'VARCHAR(50)'),
   MY_XML.Item.value('(item/@vc)[1]', 'VARCHAR(50)'),
   MY_XML.Item.value('(item/@vrn)[1]', 'VARCHAR(50)')
from @X.nodes('data/list/co') AS MY_XML (Item);

1 Ответ

1 голос
/ 25 июня 2019

нашел способ работать!

declare @X xml;
select @X = T.MY_XML
from openrowset(bulk 'C:\XML\IEA.1.20190612101007-WL.XML', single_blob) as T(MY_XML)
select
   MY_XML.Item.value('(@cm)[1]', 'VARCHAR(20)'),
   MY_XML.Item.value('(@obu)[1]', 'VARCHAR(50)'),
   MY_XML.Item.value('(@vc)[1]', 'VARCHAR(50)'),
   MY_XML.Item.value('(@vrn)[1]', 'VARCHAR(50)')
from @X.nodes('data/list/co/item') AS MY_XML (Item);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...