我如何解析XML这一段?
How do I parse this piece of XML?
我的 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)
但是我不知道如何获取失败者节点的 Id 属性
我真的明白了...
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 层次结构,然后使用相对运算符 (../) 走出去获取所需的任何父部分。
我的 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)
但是我不知道如何获取失败者节点的 Id 属性
我真的明白了...
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 层次结构,然后使用相对运算符 (../) 走出去获取所需的任何父部分。