2016-10-18 6 views
0

RubyMineでXML処理を学ぼうとしています.nokogiri.comのチュートリアルと、stackoverflow.comのフォーラムで検索した内容に基づいています。RubyMineでXMLを処理する

私のコードは次のとおりです。

Then /^I process an XML file:(.*?).$/ do |arg1| 
    xml_str = Nokogiri::XML('<root> 
    <sitcoms> 
    <sitcom> 
     <name>Married with Children</name> 
     <characters> 
     <character>Al Bundy</character> 
     <character>Bud Bundy</character> 
     <character>Marcy Darcy</character> 
     </characters> 
    </sitcom> 
    <sitcom> 
     <name>Perfect Strangers</name> 
     <characters> 
     <character>Larry Appleton</character> 
     <character>Balki Bartokomous</character> 
     </characters> 
    </sitcom> 
    </sitcoms> 
    <dramas> 
    <drama> 
     <name>The A-Team</name> 
     <characters> 
     <character>John "Hannibal" Smith</character> 
     <character>Templeton "Face" Peck</character> 
     <character>"B.A." Baracus</character> 
     <character>"Howling Mad" Murdock</character> 
     </characters> 
    </drama> 
    </dramas> 
</root> 
') 

    doc = Nokogiri::XML(xml_str) 
    sleep 2 
    puts "\ndoc class is " + doc.class.to_s 
    sleep 2 

    thing = doc.xpath("//character") 
    sleep 2 
    puts "\nthing class is " + thing.class.to_s 
    sleep 2 

    stop_value = thing.length 
    idx = 0 
    puts "\nthing length is #{stop_value}" 
    if thing.empty? 
    puts "\nthing is empty" 
    else 
    pits "\nthing is NOT empty" 
    end 

    while idx < stop_value 
    puts "\n" + thing[idx].to_s 
    idx += 1 
    end 

「ドキュメント」のためのクラスが正しいのですが、「もの」のためのクラスがnilです。

私はRubyMine 8.0.3、Ruby 2.2.1、およびAppium 1.5.3を実行しています。

ありがとうございます。

答えて

1

Nokogiri::XMLを2回呼び出すと問題が発生します.2回目に1回、結果をxml_strに割り当て、次にdoc = Nokogiri::XML(xml_str)に再度割り当てます。コードを一度だけ呼び出すように変更した場合、正常に動作します。

doc = Nokogiri::XML('<root> 
    <sitcoms> 
    <sitcom> 
     <name>Married with Children</name> 
     <characters> 
     <character>Al Bundy</character> 
     <character>Bud Bundy</character> 
     <character>Marcy Darcy</character> 
     </characters> 
    </sitcom> 
    <sitcom> 
     <name>Perfect Strangers</name> 
     <characters> 
     <character>Larry Appleton</character> 
     <character>Balki Bartokomous</character> 
     </characters> 
    </sitcom> 
    </sitcoms> 
    <dramas> 
    <drama> 
     <name>The A-Team</name> 
     <characters> 
     <character>John "Hannibal" Smith</character> 
     <character>Templeton "Face" Peck</character> 
     <character>"B.A." Baracus</character> 
     <character>"Howling Mad" Murdock</character> 
     </characters> 
    </drama> 
    </dramas> 
</root> 
') 

puts "doc class is #{doc.class}" 
# => doc class is Nokogiri::XML::Document 

thing = doc.xpath("//character") 
puts "thing class is #{characters.class}" 
# => thing class is Nokogiri::XML::NodeSet 
+0

ありがとう、Jordan !!いったん私がnokogiriへの2回目の呼び出しを取り出したら、私のコードはうまくいった!! –

+0

喜んで助けてください!私の答えがあなたの問題を解決したら、それを合格とマークしてください。 –

関連する問題