Вот мой XML нуб подход.
Если доверять только элемент последовательности, а не координатные значения сами по себе быть последовательность:
select
coordinate = max(case when element = 'coordinate' then elemval end)
, value = max(case when element = 'Value' then elemval end)
from (
select
element = row.value('local-name(.)','varchar(32)')
, elemval = row.value('.','int')
, position = row.value('for $s in . return count(../*[. << $s]) + 1', 'int')
from @xml.nodes('/myroot/scene/item/*/*') a (row)
) a
group by position
Альтернативно записывается в виде двух .nodes()
и JOIN
(вы получите идею).
Если вы доверяете координате нумерации последовательность, начиная с нуля:
select
coordinate = row.value('for $s in . return count(../*[. << $s]) + 1', 'int')
- 1
, value = row.value('.','int')
from @xml.nodes('/myroot/scene/item/Values/*') a (row)
Если доверять только координатой нумерации, чтобы быть последовательность, но из любого семени:
select
coordinate = row.value('for $s in . return count(../*[. << $s]) + 1', 'int')
+ row.value('(/myroot/scene/item/coordinates/coordinate)[1]','int')
- 1
, value = row.value('.','int')
from @xml.nodes('/myroot/scene/item/Values/*') a (row)
Дорожки могут быть сокращены:
/myroot/scene/item/*/*
->//item/*/*
/myroot/scene/item/Values/*
->//Values/*
/myroot/scene/item/coordinates/coordinate
->//coordinate
Но я не знаю, мудрость этого в любом случае.
//item/*/*
можно, скорее всего, сделать более конкретным, так что он включает только coordinate
и Value
краевые узлы, но я не знаю синтаксиса.
Где хранится документ XML? – annakata