尝试使用nokogiri

时间:2018-12-04 19:06:26

标签: ruby-on-rails ruby xml api nokogiri

我正在尝试将信息输出到一个来自大学项目的XML传输api的网页上。我在轨道和nokogiri宝石上使用红宝石。我可以接受信息,但是当我尝试在结果页面上输出信息时,它只是空白。

以下获取api信息的方法在相关的rails控制器文件中。

def results
require 'nokogiri'

@doc = Nokogiri::XML(open("http://api.irishrail.ie/realtime/realtime.asmx/getAllStationsXML"))
end

我可以看到xml信息正在传递给视图。当我仅将<%= @doc %>放在视图中时,它会使xml格式的信息打印在页面上。

但是,我显然需要正确设置其格式。我在视图中有下面的代码,并且还尝试将其放在controller方法中(减去<%%>表示法),但它似乎不起作用。

<% @doc.xpath('//StationId').each do |station_element| %>

<%= station_element.text %>

<% end %>

这是XML数据的样子:

<?xml version="1.0" encoding="UTF-8"?>
<ArrayOfObjStation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://api.irishrail.ie/realtime/">
  <objStation>
    <StationDesc>Belfast Central</StationDesc>
    <StationAlias />
    <StationLatitude>54.6123</StationLatitude>
    <StationLongitude>-5.91744</StationLongitude>
    <StationCode>BFSTC</StationCode>
    <StationId>228</StationId>
  </objStation>
  <objStation>
    <StationDesc>Lisburn</StationDesc>
    <StationAlias />
    <StationLatitude>54.514</StationLatitude>
    <StationLongitude>-6.04327</StationLongitude>
    <StationCode>LBURN</StationCode>
    <StationId>238</StationId>
  </objStation>
</ArrayOfObjStation>

如果有人能指出我只需要打印出xml数据的某些部分所需的代码,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

您在http://api.irishrail.ie/realtime/realtime.asmx/getAllStationsXML的XML已namespace 我修改了xml以反映API返回的内容

您需要在xpath表示法中使用名称空间前缀才能使其正常工作。

@doc.xpath('//StationId')替换@doc.xpath('//xmlns:StationId')来解决它。