Michał Stepczuk

Michał Stepczuk Eating Bugs for
Breakfast

Temat: REXML - dziwne zachowanie

Mam takiego XML'a:

<quiz>
<title>The Quiz</title>
<items>
<item>
<question>Na jakim kontynecie zlokalizowana jest Japonia?</question>
<answers>
<answer correct="y">Azja</answer>
<answer>Europa</answer>
<answer>Afryka</answer>
<answer>Ameryka</answer>
</answers>
</item>

<item>
<question>Co nie potrafi pływać?</question>
<answers>
<answer>Tunczyk</answer>
<answer correct="y">Krowa</answer>
<answer>Delfin</answer>
<answer>Orka</answer>
</answers>
</item> </items>
</quiz>


Wczytuję go sobie z pliku


require 'rexml/document'
include REXML

file = File.new("quiz_data.xml")
doc = Document.new(file)

xmlquiz = doc.root

Michał Stepczuk edytował(a) ten post dnia 25.05.10 o godzinie 23:10
Michał Stepczuk

Michał Stepczuk Eating Bugs for
Breakfast

Temat: REXML - dziwne zachowanie

Dlaczego wykonując poniższy fragment kodu


xmlquiz.elements['items'].each_element('//item') do |i|
i.elements['answers'].each do |q|
puts q
end
end

na wyjściu dostaję puste linie

<answer correct='y'>Azja</answer>


<answer>Europa</answer>


<answer>Afryka</answer>


<answer>Ameryka</answer>



<answer>Tunczyk</answer>


<answer correct='y'>Krowa</answer>


<answer>Delfin</answer>


<answer>Orka</answer>


Jeśli chiałbym zrobić:

xmlquiz.elements['items'].each_element('//item') do |i|
i.elements['answers'].each do |q|
puts q
end
end

to oczywiście się nie uda:

NoMethodError: undefined method `text' for "\n ":REXML::Text
from (irb):88
from /usr/lib/ruby/1.8/rexml/parent.rb:40:in `each'
from /usr/lib/ruby/1.8/rexml/parent.rb:40:in `each'
from (irb):86
from /usr/lib/ruby/1.8/rexml/element.rb:892:in `each'
from /usr/lib/ruby/1.8/rexml/xpath.rb:53:in `each'
from /usr/lib/ruby/1.8/rexml/element.rb:892:in `each'
from /usr/lib/ruby/1.8/rexml/element.rb:393:in `each_element'
from (irb):84
from (irb):56


Spotkał się może ktoś z takim problemem i wie jak to rozwiązać?Michał Stepczuk edytował(a) ten post dnia 25.05.10 o godzinie 23:17
Radosław Bułat

Radosław Bułat Ruby on Rails
developer,
Adtaily.com

Temat: REXML - dziwne zachowanie

Nie mam czasu zagłębiać się w ten konkretny problem, ale polecałbym Ci spróbować innej biblioteki do parsowania xmla. REXML jest znany z tego, że jest bugowaty. Spróbuj nokogiri, hpricot lub libxml.

http://nokogiri.org/
http://github.com/hpricot/hpricot
http://libxml.rubyforge.org/

Następna dyskusja:

Dziwne zachowanie aplikacji




Wyślij zaproszenie do