這裏是我的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 2010-09-13 15:50:27