Попытка вывести информацию из XML API, используя nokogiri - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь вывести информацию на веб-страницу, взятую из API транспорта XML для проекта колледжа.Я использую рубин на рельсах и камень нокогири.Я могу взять информацию, но когда я пытаюсь вывести ее на страницу результатов, она просто пуста.

Приведенный ниже способ получения информации о API находится в соответствующем файле контроллера rails.

def results
require 'nokogiri'

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

Я вижу, что информация xml передается в представление.Когда я просто помещаю <%= @doc %> в представление, это приводит к тому, что информация в формате xml распечатывается на странице.

Однако мне, очевидно, нужно правильно отформатировать ее.У меня есть код ниже в представлении, и я также попытался поместить его в метод контроллера (минус нотация <%%>), но он, похоже, не работает.

<% @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 голосов
/ 05 декабря 2018

Ваш XML в http://api.irishrail.ie/realtime/realtime.asmx/getAllStationsXML имеет пространство имен ( Я изменил XML, чтобы отразить то, что возвращается API )

Вам необходимо использовать пространство именпрефикс в нотации xpath, чтобы заставить его работать.

замените @doc.xpath('//StationId') на @doc.xpath('//xmlns:StationId'), чтобы исправить это.

...