Иногда можно использовать регулярные выражения для извлечения чего-либо из HTML. Серьезно, поссориться с тупым парсером или использовать быстрое регулярное выражение, например /<a href="([^"]+)">/
? Это не идеально, но ваше программное обеспечение будет работать намного быстрее, и вы, вероятно, сможете использовать еще одно регулярное выражение, чтобы убедиться, что найденное совпадение действительно похоже на URL. Конечно, он взломан и, возможно, не работает в нескольких крайних случаях, но этого достаточно для большинства случаев использования.
На основании огромного тома «Как использовать регулярные выражения для получения HTML?» вопросы, которые публикуются здесь почти ежедневно, и тот факт, что каждый ответ - «Использовать анализатор HTML», это должно быть достаточно спорным.
попробуйте это
require 'rexml/document' doc = REXML::Document.new File.new('mydoc.xml') doc.elements('*/foo/baa') { |element| puts element.get_text }
Я предпочитаю самоцветы Nokogiri и Hpricot. Вы можете попробовать их, если хотите.
require 'rexml/document'
xml = <<-EOS
<foo>
<baa>value</baa>
</foo>
EOS
doc = REXML::Document.new(xml)
doc.root.elements.each("baa") { |element| p element.text }
Если вы хотите собирать значения, вы можете вместо этого использовать to_a.map или inject. См. REXML :: ELements .
Решение Ришава меня бросает.
11:50:18 Temp$ ruby rx.rb rx.rb:5:in `elements': wrong number of arguments (1 for 0) (ArgumentError) from rx.rb:5 11:50:25 Temp$
Вот несколько альтернативных подходов:
require 'rexml/document' doc = REXML::Document.new DATA doc.elements.each('//foo/baa') { |element| puts element.get_text } baas = REXML::XPath.each(doc, '//foo/baa/text()') {|txt| p txt} p baas __END__ <foo> <baa>value</baa> </foo>