2011-05-11 26 views
0

我有一點我想從中獲取第一個孩子的XML。到目前爲止,我已經能夠這樣做:使用SQLXML的xml文檔中的第一個孩子

DECLARE @x XML = '<a><b foo="bar">some data</b><b foo="baz"/></a>' 
SELECT @x.query('(/a/child::*)[1]') 

我只是想知道是否有更有效的方法。我的問題是,直到運行時,「a」標籤後面的元素對我來說是未知的,所以只是說

@x.query('(/a/b)[1]') 

不會爲我工作。 「a」之後的標籤也可以是「c」,我希望有一個查詢可以解釋這一點。

回答

0

這應該爲你工作:

SELECT @x.query('(/a/*[1])') 
+0

這似乎遭受與我的查詢相同的問題。也就是說,它是指定一個「抓住一切」的方法,然後採取第一個要素。除非這是某種程度上的優化(如果是這種情況,我想引用它)。 – 2011-05-11 20:56:05

+0

恐怕除非你知道第一個孩子的節點類型,否則你必須使用*選擇器。 – 2011-05-11 22:51:47

0

試試這個:

DECLARE @x XML = '<a><b foo="bar">some data</b><b foo="baz"/></a>' 
SELECT @x.query('(/a/*)[1]') 

它實際上是引擎蓋下的完全相同的查詢,爲孩子軸是XPath中的默認值。另外,這應該是有效的。

+0

這似乎爲我的查詢會從有同樣的問題。也就是說,它是指定一個「抓住一切」的方法,然後採取第一個要素。除非這是某種程度上的優化(如果是這種情況,我想引用它)。 – 2011-05-11 20:55:51

相關問題