2014-10-08 60 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"