2011-05-11 22 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

相关问题