Проблема чтения XML с Nokogiri - PullRequest
       3

Проблема чтения XML с Nokogiri

4 голосов
/ 18 августа 2011

Мой сценарий Ruby должен считывать документ XML с URL-адреса и проверять его на корректность, возвращая любые ошибки. У меня есть образец плохого XML-документа со следующим текстом (из учебника Nokogiri :

<?xml version="1.0"?>
  <root>
    <open>foo
      <closed>bar</closed>
  </root>

Мой тестовый скрипт выглядит следующим образом (url ссылается на вышеуказанный xml-файл, размещенный на моем личном сервере):

require 'nokogiri'

document = Nokogiri::XML(url) 

puts document
puts document.errors

Вывод:

<?xml version="1.0"?>
Start tag expected, '<' not found

Почему происходит захват только первой строки XML-файла? Он делает это даже с известными хорошими файлами XML.

Ответы [ 3 ]

5 голосов
/ 18 августа 2011

Он пытается разобрать URL, а не его содержимое. Пожалуйста, примите во внимание, что первый параметр Nokogiri::XML должен быть строкой, содержащей документ или объект IO, поскольку это просто ярлык для Nokogiri::XML::Document.parse, как указано здесь .

РЕДАКТИРОВАТЬ: Для чтения с URI

require 'open-uri'
open(uri).read
3 голосов
/ 18 августа 2011

Я не слишком уверен, какой код вы используете для фактического вывода содержимого XML.Я вижу только ошибку печати кода.Тем не менее, я опубликовал пример кода для эффективного перемещения по XML с Nokogiri ниже:

<item>
  Something
</item> 
<item>
  Else
</item>

doc = Nokogiri::XML(open(url))
set = doc.xpath('//item')
set.each {|item| puts item.to_s}
  #=> Something
  #=> Else

В общем, учебник здесь должен вам помочь.

0 голосов
/ 07 марта 2016

если вы уже получаете xml из xml Nokogiri, то убедитесь, что вы используете '.to_s' перед передачей его в функцию XML.

например, xml = Nokogiri :: XML (существующие_nokogiri_xml_doc.to_s)

...