【问题标题】:First child in xml document using SQLXML使用 SQLXML 的 xml 文档中的第一个子项
【发布时间】:2011-05-12 04:21:48
【问题描述】:

我有一点想要从中获取第一个孩子的 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”,我想用一个查询来解释这一点。

【问题讨论】:

    标签: sql-server xml


    【解决方案1】:

    试试这个:

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

    实际上是完全相同的查询,因为子轴是 xpath 中的默认值。此外,这应该是有效的。

    【讨论】:

    • 这似乎遇到了与我的查询相同的问题。也就是说,它指定了一种“抓住一切”的方法,然后采用第一个元素。除非这以某种方式优化(如果是这种情况,我想参​​考一下)。
    【解决方案2】:

    这应该适合你:

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

    【讨论】:

    • 这似乎遇到了与我的查询相同的问题。也就是说,它指定了一种“抓住一切”的方法,然后采用第一个元素。除非这以某种方式进行了优化(如果是这种情况,我想参​​考一下)。
    • 恐怕除非您知道第一个孩子的节点类型,否则您将不得不使用 * 选择器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 2011-03-03
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 2016-06-20
    相关资源
    最近更新 更多