T-SQL在动态XML结构中查找节点

逗乐了

我想知道编写T-SQL查询以从动态(多级)XML结构返回节点的值或属性的正确方法是什么?

例如,如果XML如下所示:

<xml>
  <a>
    <b>1</b>
    <c>
      <node attrib="ant">2</node>
    </c>
  </a>
  <a>
    <node attrib="bird">3</node>
  </a>
  <a>
    <b>
      <c>
        <node attrib="cat">4</node>
      </c>
    </b>
  </a>
</xml>

返回节点的值和/或属性的正确查询是什么如本例所示,节点可以处于任何级别...

我已经尝试过类似的事情(没有成功):

SELECT
  node.value('node[1]', 'varchar(50)') AS node
  node.value('(node/@attrib)[1]', 'varchar(50)') AS attrib
FROM
  xml.nodes('//xml/*') AS xml(node)

编辑:感谢StuartLC为下面的答案...

根据以下帮助,这是一个有效的示例,其中也包含名称空间:

DECLARE @xml XML;
SET @xml = '
<xml xmlns:abc="xyz">
    <a>
        <b>1</b>
        <c>
            <abc:node attrib="ant">2</abc:node>
        </c>
    </a>
    <a>
        <abc:node attrib="bird">3</abc:node>
    </a>
    <a>
        <b>
            <c>
                <abc:node attrib="cat">4</abc:node>
            </c>
        </b>
    </a>
</xml>';

;WITH XMLNAMESPACES('xyz' AS ns)
SELECT
    Nodes.node.value('.', 'varchar(50)') AS node,
    Nodes.node.value('(./@attrib)[1]', 'varchar(50)') AS attrib
FROM
    @xml.nodes('//ns:node') AS Nodes(node);
斯图尔特

像这样:

SELECT
  Nodes.node.value('.', 'varchar(50)') AS node,
  Nodes.node.value('(./@attrib)[1]', 'varchar(50)') AS attrib
FROM
  @xml.nodes('//node') AS Nodes(node);

因为您的node元素似乎可以位于xml文档中的任何位置,所以//用来搜索所有元素。一旦node找到每个节点current()或仅.可用于访问此节点。

SqlFiddle在这里

编辑:用于解析xml表中列(而不是Xml @variable):

 SELECT
  Nodes.node.value('.', 'varchar(50)') AS node,
  Nodes.node.value('(./@attrib)[1]', 'varchar(50)') AS attrib
FROM
    [TableWithXmlColumn] xyz
    cross apply xyz.XmlCol.nodes('//node') as Nodes(node);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在SQL Server中读取动态XML节点

来自分类Dev

T-SQL中的结构类型

来自分类Dev

使用T-SQL从XML提取子节点值

来自分类Dev

T-SQL中的SQL XML解析

来自分类Dev

SQL XML中的动态XML节点名称

来自分类Dev

在T-SQL中解析XML

来自分类Dev

在T-SQL中解析XML

来自分类Dev

在 T-SQL 中创建 XML

来自分类Dev

如何在T-SQL中连接对等节点的值

来自分类Dev

在T-SQL中克隆表(结构/数据)的命令

来自分类Dev

T-SQL,查找数值

来自分类Dev

T-SQL /查找列中的所有点

来自分类Dev

T-sql,从键列表中查找不匹配的元素

来自分类Dev

T-SQL“动态”联接

来自分类Dev

T-SQL动态查询

来自分类Dev

T-SQL:SELECT 中的动态变量问题

来自分类Dev

T-SQL-将多个XML节点值转换/转置为列

来自分类Dev

T-SQL 将二级 XML 节点分解为多行

来自分类Dev

T SQL 向 XML 的根节点添加多个新属性

来自分类Dev

SQL:查找XML节点是否存在

来自分类Dev

SQL,在xml变量中查找节点值(如果存在),将其他节点插入xml变量中

来自分类Dev

如何摆脱动态SQL(T-SQL)

来自分类Dev

T-SQL生成XML

来自分类Dev

如何使用T-SQL在SQL Server中输出非结构化文件?

来自分类Dev

如何将多个 SQL 表结构 (T-SQL) 放入 Excel 表中?

来自分类Dev

在XML文档中查找重复的子节点

来自分类Dev

python在深层节点xml中查找标签

来自分类Dev

在 XML 中查找节点并获取父注释

来自分类Dev

如何使用内联 ID 在 T-SQL 中查询 XML