【问题标题】:selecting individual xml node using SQL使用 SQL 选择单个 xml 节点
【发布时间】:2012-01-03 21:06:35
【问题描述】:

我有一个包含许多节点的大型 XML 注释。

有没有一种方法可以让我从较大的 XML 中只选择一个节点及其所有内容?

我正在使用 sql 2005

【问题讨论】:

    标签: sql-server sql-server-2005 xquery-sql


    【解决方案1】:

    如果您想获取 XML 的一部分,您应该使用 query() Method

    declare @XML xml
    
    set @XML = 
    '
    <root>
      <row1>
        <value>1</value>
      </row1>
      <row2>
        <value>2</value>
      </row2>
    </root>
    '
    
    select @XML.query('/root/row2')
    

    结果:

    <row2>
      <value>2</value>
    </row2>
    

    如果你想要来自特定节点的值,你应该使用value() Method

    select @XML.value('(/root/row2/value)[1]', 'int')
    

    结果:

    2
    

    更新:

    如果您想将 XML 分解为多行,请使用 nodes() Method

    获取值:

    declare @XML xml
    
    set @XML = 
    '
    <root>
      <row>
        <value>1</value>
      </row>
      <row>
        <value>2</value>
      </row>
    </root>
    '
    
    select T.N.value('value[1]', 'int')
    from @XML.nodes('/root/row') as T(N)
    

    结果:

    (No column name)
    1
    2
    

    获取整个 XML:

    select T.N.query('.')
    from @XML.nodes('/root/row') as T(N)
    

    结果:

    (No column name)
    <row><value>1</value></row>
    <row><value>2</value></row>
    

    【讨论】:

    • 很好,如果每个行节点都只是 并且我想按顺序获取每个行节点怎么办?
    • 我希望结果 (2) 不是整数,但我想获取 row1 xml 块,然后是 row2... 用于所有行
    • @kacalapy - 更新了您如何将 XML 分解为多行的答案。
    • 请注意,与第一个示例的 相比,节点方法示例的 XML 具有
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多