这是我的XML摘录:
select trx.col.value('./SettlementCurrency[1]', 'nvarchar(20)') Settccy,
trx.col.value('(./SettlementAmount[1]/Amount[@ccy="USD"])[1]', 'nvarchar(20)') AmountInccy
from @xml.nodes('/Transaction') Trx(col)
我想检索标签Amount的值,其中ccy =" Tag SettlementCurrency"
如果我硬co" USD"然后它给了我正确的价值:
select trx.col.value('./SettlementCurrency[1]', 'nvarchar(20)') Settccy,
trx.col.value('(./SettlementAmount[1]/Amount[@ccy=./SettlementCurrency[1]])[1]', 'nvarchar(20)') AmountInccy
from @Fundxml.nodes('/Transaction') Trx(col)
但是我想编写类似
的代码textfield.frame.size.width
你可以帮我写一个相对路径吗?
我使用的是SQL Server 2008。
由于
答案 0 :(得分:0)
尝试这样
select trx.col.value('(SettlementCurrency/text())[1]', 'nvarchar(20)') Settccy,
trx.col.value('(SettlementAmount/Amount[@ccy=../../SettlementCurrency/text()])[1]', 'nvarchar(20)') AmountInccy
from @Fundxml.nodes('/Transaction') Trx(col)
在谓词中,您在XML中更深入,在跳到<Amount>
之前,您必须跳出<SettlementAmount>
并跳出<SettlementCurrency>
。
如果您的XML中只有一个<SettlementCurrency>
,则可以使用深度搜索(使用//
)代替:
select trx.col.value('(SettlementCurrency/text())[1]', 'nvarchar(20)') Settccy,
trx.col.value('(SettlementAmount/Amount[@ccy=//SettlementCurrency/text()])[1]', 'nvarchar(20)') AmountInccy
from @Fundxml.nodes('/Transaction') Trx(col)
第三个选项是使用XQuery
s let
在</Transaction>
节点的上下文中创建一个具有此值的变量:
select trx.col.value('(SettlementCurrency/text())[1]', 'nvarchar(20)') Settccy,
trx.col.value('let $c:=(SettlementCurrency/text())[1]
return (SettlementAmount/Amount[@ccy=$c])[1]', 'nvarchar(20)') AmountInccy
from @Fundxml.nodes('/Transaction') Trx(col)