You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XML解析:获取指定属性节点值及匹配币种的Amount节点值

动态匹配XML中对应的节点值

我来帮你搞定这个动态匹配的需求——完全不用硬编码币种,咱们可以直接通过XML节点关系或者SQL变量来实现自动匹配。

核心思路

先获取<SettlementCurrency>标签的文本值,再用这个值作为筛选条件,找到@ccy属性与之匹配的<Amount>节点内容。

方法一:直接在XQuery中关联节点

这是最简洁的写法,直接在XPath里引用<SettlementCurrency>的值:

declare @FundXML XML 
set @FundXML='<Transaction> 
<TransactionID>58265226</TransactionID> 
<SettlementCurrency>USD</SettlementCurrency> 
<SettlementAmount> 
<Amount ccy="EUR" isFundCcy="true">-1603375.03</Amount> 
<Amount ccy="USD">-1890218.82</Amount> 
</SettlementAmount> 
</Transaction>'

-- 动态匹配的查询语句
SELECT 
    @FundXML.value('(/Transaction/SettlementAmount/Amount[@ccy = /Transaction/SettlementCurrency/text()])[1]', 'DECIMAL(18,2)') AS MatchingAmount

代码解释:

  • /Transaction/SettlementCurrency/text() :提取结算币种的文本值(这里是USD)
  • @ccy = /Transaction/SettlementCurrency/text() :用提取到的币种值筛选对应的<Amount>节点
  • [1] :确保只返回第一个匹配的节点(如果存在多个同币种的<Amount>,可根据实际需求调整)
  • DECIMAL(18,2) :指定返回的金额数据类型,适配金额场景

方法二:用SQL变量存储币种值(更灵活)

如果需要后续复用这个币种值,或者想让逻辑更清晰,可以先把币种提取到变量中,再在XQuery里引用:

declare @FundXML XML 
set @FundXML='<Transaction> 
<TransactionID>58265226</TransactionID> 
<SettlementCurrency>USD</SettlementCurrency> 
<SettlementAmount> 
<Amount ccy="EUR" isFundCcy="true">-1603375.03</Amount> 
<Amount ccy="USD">-1890218.82</Amount> 
</SettlementAmount> 
</Transaction>'

-- 先提取币种到变量
DECLARE @SettlementCurrency VARCHAR(3) = @FundXML.value('(/Transaction/SettlementCurrency/text())[1]', 'VARCHAR(3)')

-- 用变量筛选对应的Amount节点
SELECT 
    @FundXML.value('(/Transaction/SettlementAmount/Amount[@ccy = sql:variable("@SettlementCurrency")])[1]', 'DECIMAL(18,2)') AS MatchingAmount

代码解释:

  • sql:variable("@SettlementCurrency") :在XQuery中引用SQL变量,实现动态匹配
  • 这种方式更适合复杂场景,比如需要多次使用币种值进行其他计算的情况

内容的提问来源于stack exchange,提问作者Anne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:14:05