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

JDE E1 Orchestrator:JRuby解析ECB汇率XML转JSON报错求助

解决JRuby解析ECB汇率XML转JSON的问题

ECB每日汇率XML自带命名空间,这是修改元素定位后报错的核心原因,以下是适配JDE E1 Orchestrator的完整解决方案:

可行的JRuby代码示例

require 'nokogiri'
require 'json'

# 读取XML内容(若通过Orchestrator HTTP节点获取,直接传入返回内容即可)
xml_content = open('https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml').read

# 解析XML并绑定命名空间
doc = Nokogiri::XML(xml_content)
ns_map = {'efx' => 'http://www.ecb.int/vocabulary/2002-08-01/eurofxref'}

# 提取汇率日期与具体数据
exchange_date = doc.xpath('//efx:Cube[@time]', ns_map).first['time']
rate_list = []

doc.xpath('//efx:Cube[@time]/efx:Cube', ns_map).each do |rate_node|
  rate_list << {
    'currency' => rate_node['currency'],
    'rate' => rate_node['rate'].to_f
  }
end

# 构造最终JSON结构
output_json = {
  'data_source' => 'ECB',
  'exchange_date' => exchange_date,
  'base_currency' => 'EUR',
  'rates' => rate_list
}

# 输出JSON(适配Orchestrator输出要求,可替换为赋值给指定输出变量)
puts JSON.pretty_generate(output_json)

常见报错原因与修复

  • 未处理命名空间:直接用//Cube定位元素会导致Nokogiri无法匹配,出现undefined method [] for nil:NilClass错误。必须通过命名空间映射(ns_map)在XPath查询中指定前缀。
  • 层级定位错误:汇率节点是日期节点的子元素,若用//efx:Cube[@currency]模糊定位,可能匹配到无关节点,需用//efx:Cube[@time]/efx:Cube精准定位层级。
  • 类型转换异常:若XML中rate值为空或格式异常,to_f会报错,可修改为rate_node['rate'] ? rate_node['rate'].to_f : nil做容错处理。

JDE E1 Orchestrator适配提示

  • 若通过Orchestrator的HTTP节点获取XML,直接将节点返回的XML内容传入JRuby脚本,无需使用open方法避免权限问题。
  • 可将output_json赋值给Orchestrator的输出变量,而非直接puts,确保数据能被后续节点读取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 01:50:31