2014-10-08 61 views
0

我有這樣的XMLnokogiri slop模式如何處理破折號分隔的元素?

<league xmlns="http://feed.elasticstats.com/schema/basketball/schedule-v2.0.xsd" id="4353138d-4c22-4396-95d8-5f587d2df25c" name="NBA" alias="NBA"> 
    <season-schedule id="eb322501-7291-457b-9bbb-b4106ecf9564" year="2014" type="PRE"> 
    <games> 
... 

如何才能獲得「賽季時間表」的內容

到目前爲止,我已經嘗試了這些沒有任何成功:

doc2.html.body.league.seasonschedule 
NoMethodError: undefined method `seasonschedule' for #<Nokogiri::XML::Element:0x007faddf5ce2b8> 
from /Users/boti/.rvm/gems/[email protected]/gems/nokogiri-1.6.3.1/lib/nokogiri/decorators/slop.rb:30:in `method_missing' 
[13] pry(main)> doc2.html.body.league.season_schedule 
NoMethodError: undefined method `season_schedule' for #<Nokogiri::XML::Element:0x007faddf5ce2b8> 
from /Users/boti/.rvm/gems/[email protected]/gems/nokogiri-1.6.3.1/lib/nokogiri/decorators/slop.rb:30:in `method_missing' 

回答

1

遺憾的是,似乎有沒有更好的辦法:

doc2.html.body.league.send('season-schedule') 

也請閱讀com登錄到Nokogiri docs的斜坡部分。這些是

  1. 不要使用它。
  2. 這可能會或可能不會是一種迴避讚美。
  3. 不,真的,不要使用這個。如果您使用它,請不要報告錯誤。
  4. 您已收到警告!
+1

':賽季schedule'將無法正常工作,你需要用':「賽季時間表」'或'剛「season-schedule」避免將'-'解釋爲負數。 – matt 2014-10-08 13:54:28

+0

@matt - 很自然,謝謝你糾正它。 – BroiSatse 2014-10-08 14:01:00

1

我不知道是什麼問題,因爲這個工程:

require 'nokogiri' 

doc = Nokogiri::HTML(<<EOT) 
<league xmlns="http://feed.elasticstats.com/schema/basketball/schedule-v2.0.xsd" id="4353138d-4c22-4396-95d8-5f587d2df25c" name="NBA" alias="NBA"> 
    <season-schedule id="eb322501-7291-457b-9bbb-b4106ecf9564" year="2014" type="PRE"> 
    <games/> 
    </season-schedule> 
</league> 
EOT 

doc.at('season-schedule') # => #<Nokogiri::XML::Element:0x3fefd20679d8 name="season-schedule" attributes=[#<Nokogiri::XML::Attr:0x3fefd20678e8 name="id" value="eb322501-7291-457b-9bbb-b4106ecf9564">, #<Nokogiri::XML::Attr:0x3fefd20678d4 name="year" value="2014">, #<Nokogiri::XML::Attr:0x3fefd20678c0 name="type" value="PRE">] children=[#<Nokogiri::XML::Text:0x3fefd2067014 "\n ">, #<Nokogiri::XML::Element:0x3fefd2066f60 name="games">, #<Nokogiri::XML::Text:0x3fefd2066d94 "\n ">]> 
doc.at('season-schedule')['id'] # => "eb322501-7291-457b-9bbb-b4106ecf9564"