2011-05-11 4 views
0

最初の子を取得したいXMLのビットがあります。これまでのところ、私はthuslyそれを行うことができました:より効率的な方法があるかどう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"でもかまいません。そのために1つのクエリが必要です。

答えて

0

これはあなたのために働く必要があります。これは私のクエリが行うのと同じ問題に苦しむように見える

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

これは私のクエリと同じ問題を抱えているようです。すなわち、「すべてをつかむ」アプローチを指定してから最初の要素を取ります。これが何らかの形で最適化されている場合を除き(私はこれを参照したいと思います)。 –

+0

最初の子のノードタイプが分からない限り、*セレクタを使用する必要があります。 –

0

はこれを試してみてください:

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

child軸は既定のXPathの1であるとしてそれは、実際にボンネットの下にまったく同じクエリです。また、これは効率的でなければなりません。

+0

。すなわち、「すべてをつかむ」アプローチを指定してから最初の要素を取ります。これが何らかの形で最適化されている場合を除き(私はこれを参照したいと思います)。 –

関連する問題