【发布时间】:2013-02-10 16:51:19
【问题描述】:
我在尝试循环访问部分 XML 文件时遇到问题。我正在使用带有 Rails3 的 Nokogiri。
我正在阅读这个 XML 提要 - http://www.ecb.europa.eu/stats/eurofxref/eurofxref-hist-90d.xml
这是我的代码:
def save_rates
# get the XML data form ECB URL
file_handle = open('http://www.ecb.europa.eu/stats/eurofxref/eurofxref-hist-90d.xml')
# get document xml string and create Nokogiri object
doc = Nokogiri::XML(file_handle)
# foreach date...
doc.xpath("//Cube/Cube").each do |cube|
raise cube.inspect # isn't being executed
# foreach currency...
cube.xpath("./Cube").each do |curr|
# create DB entry
Exchange.create(:currency=>curr.currency, :rate=>curr.rate, :record_date => cube.time)
end
end
end
当我检查 doc 时,我可以看到 Nokogiri 对象。但是,当我尝试在第一个 .each 循环中提高 cube.inspect 时,它并没有触发。所以这让我相信我的道路是错误的://Cube/Cube。
从我在 Nokogiri 教程中看到的其他示例中,路径与此类似。我的路径是错的还是我在这里做错了什么?
我是 ruby n00b,所以请放轻松!
更新
这是 XML 的格式
<gesmes:Envelope xmlns:gesmes="http://www.gesmes.org/xml/2002-08-01" xmlns="http://www.ecb.int/vocabulary/2002-08-01/eurofxref">
<gesmes:subject>Reference rates</gesmes:subject>
<gesmes:Sender>
<gesmes:name>European Central Bank</gesmes:name>
</gesmes:Sender>
<Cube>
<Cube time="2013-02-25">
<Cube currency="USD" rate="1.3304"/>
<Cube currency="JPY" rate="125"/>
<Cube currency="BGN" rate="1.9558"/>
<Cube currency="CZK" rate="25.52"/>
<Cube currency="DKK" rate="7.4614"/>
<Cube currency="GBP" rate="0.8789"/>
...
</Cube>
<Cube>
<Cube time="2013-02-24">
<Cube currency="USD" rate="1.3304"/>
<Cube currency="JPY" rate="125"/>
<Cube currency="BGN" rate="1.9558"/>
<Cube currency="CZK" rate="25.52"/>
<Cube currency="DKK" rate="7.4614"/>
<Cube currency="GBP" rate="0.8789"/>
...
</Cube>
</Cube>
</gesmes:Envelope>
【问题讨论】:
-
请包含您尝试读取的 XML 的 sn-p。将 URL 放入您的代码中是可以的,但是如果/当该链接中断您的问题时,对于搜索相同问题的其他人来说,这将没有多大意义或价值。
-
我已经包含了xml结构
标签: ruby xml ruby-on-rails-3 xml-parsing nokogiri