Я пытаюсь прочитать ВСЕ элементы из этого 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);