【问题标题】:How do I parse this piece of XML?如何解析这段 XML?
【发布时间】:2015-05-20 14:01:48
【问题描述】:

我的 SQL 中有以下 XML:

DECLARE @xml XML
SET @xml = '<?xml version="1.0" encoding="UTF-8"?>
<BillingAddresses>
  <BillingAddress Winner="W1">
    <Losers>
      <Loser Id="L1" />
      <Loser Id="L2" />
      <Loser Id="L3" />
    </Losers>
  </BillingAddress>
  <BillingAddress Winner="W10">
    <Losers>
      <Loser Id="L65" />
    </Losers>
  </BillingAddress>
</BillingAddresses>'

我想通过以下方式获取数据。

Winner | LoserID 
W1       L1
W1       L2
W1       L3
W10      L65

我可以得到 BillingAddress 的 Winner 属性:

SELECT Col.value('(@Winner)[1]', 'varchar(30)')
FROM @xml.nodes('/BillingAddresses/BillingAddress') Rev(Col) 

但我不知道如何获取 Loser 节点的 Id 属性

【问题讨论】:

    标签: sql sql-server xml sql-server-2005


    【解决方案1】:

    我真的明白了……

        SELECT 
             Col.value('(../../@Winner)[1]', 'varchar(30)') AS WinnerId
            ,Col.value('(@Id)[1]', 'varchar(18)') AS LoserId
        FROM @xml.nodes('/BillingAddresses/BillingAddress/Losers/Loser') Rev(Col) 
    

    诀窍是深入到 XML 层次结构中,然后使用相对运算符 (../) 来获取所需的任何父片段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-06
      • 2012-02-27
      • 2013-06-07
      • 2013-06-09
      相关资源
      最近更新 更多