日期:2014-05-18  浏览次数:20401 次

求解释xml数据类型提供的value方法!!!!
value方法中中的参数xquery怎么解释?
比如:
SQL code
DECLARE @s VARCHAR(100)
SET @s='a,b,c,dd,ee,f,aa,a,aa,f'
SELECT b.v FROM
    (SELECT CAST('<r>' + REPLACE(@s,',','</r><r>') + '</r>' AS XML) x) a 
CROSS APPLY
    (SELECT v=t.x.value('.','VARCHAR(10)') FROM a.x.nodes('//r') AS t(x) ) b

value方法中的'.'是什么意思?
SQL code
DECLARE @myDoc xml
DECLARE @ProdID int
SET @myDoc = '<Root>
<ProductDescription ProductID="1" ProductName="Road Bike">
<Features>
  <Warranty>1 year parts and labor</Warranty>
  <Maintenance>3 year parts and labor extended maintenance is available</Maintenance>
</Features>
</ProductDescription>
</Root>'

SET @ProdID =  @myDoc.value('(/Root/ProductDescription/@ProductID)[1]', 'int' )
SELECT @ProdID

value中的'[1]'是什么意思?
希望能有比较详细的解释。

------解决方案--------------------
网上搜大把的。。。。

/ 从根节点选取。 
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 
. 选取当前节点。 
.. 选取当前节点的父节点。 
@ 选取属性。 

/bookstore/book[1] 选取属于 bookstore 子元素的第一个 book 元素。 
/bookstore/book[last()] 选取属于 bookstore 子元素的最后一个 book 元素。 
/bookstore/book[last()-1] 选取属于 bookstore 子元素的倒数第二个 book 元素。 
/bookstore/book[position()<3] 选取最前面的两个属于 bookstore 元素的子元素的 book 元素。 

------解决方案--------------------
参考 http://blog.csdn.net/happyflystone/article/details/4402574
------解决方案--------------------
先做 .nodes, 得到 //r 的所有 node, 这个 nodes 展示为表 T , 列c
然后针对表中的每个 node 取 value, 也就是 T.c.value , 取里面的 xpath 表示的值, 使用的是 ., 也就是当前 node

所以总的来说, 就是取每个 //r 的 node 的值
------解决方案--------------------
探讨
先做 .nodes, 得到 //r 的所有 node, 这个 nodes 展示为表 T , 列c
然后针对表中的每个 node 取 value, 也就是 T.c.value , 取里面的 xpath 表示的值, 使用的是 ., 也就是当前 node

所以总的来说, 就是取每个 //r 的 node 的值