Monday, December 7, 2009

Parsing Dengan Nokogiri

Seringkali programmer dihadapkan oleh data yang kompleks dan harus melakukan parsing terhadap dokumen HTML atau XML. Untuk membuat sebuah parser, tentu saja waktu yang dibutuhkan tidak sedikit dan tidak semudah membalik tangan. Namun dengan adanya Nokogiri, melakukan parsing menjadi lebih mudah. Nokogiri adalah sebuah parser untuk HTML, XML, SAX, dan Reader dengan menggunakan XPath atau CSS3 Selectors.

Berikut ini adalah contoh penggunaan Nokogiri untuk melakukan parsing XML dimana diasumsikan memiliki dokumen xml foods.xml yang terletak di direktori yang sama.

#!/usr/bin/ruby

require 'rubygems'
require 'nokogiri'
xml = Nokogiri::XML.parse(File.read('foods.xml'))

# menampilkan value dari tag xml bernama 'color'
colors = xml.search("//color").collect(&:text)
i = 1
colors.each do |color|
puts "color-#{i}: #{color}"
i = i + 1
end

# menampilkan value dari tag xml bernama 'name' dimana tag xml bernama 'color' memiliki value 'yellow'
names = xml.search("//color[text()='yellow']/ancestor::node()/name").collect(&:text)
i = 1
names.each do |name|
puts "Name-#{i}: #{name}"
i = i + 1
end

# menampilkan seluruh value dari tag xml bernama 'tag' dimana tag xml bernama 'name' memiliki value 'apple'
all_tags = xml.search("//name[text()='apple']/../tags/tag").collect(&:text)
i = 1
all_tags.each do |tag|
puts "tag-#{i}: #{tag}"
i = i + 1
end

# menampilkan value 'baked' dari tag xml bernama tag dimana tag xml bernama name memiliki value 'apple'
tag = xml.search("//name[text()='apple']/../tags/tag[text()='baked']").collect(&:text)
puts "tag: #{tag}"


Untuk yang ingin lebih detail tentang parsing XML dengan Nokogiri, sangat disarankan membaca artikel blog yang dibuat oleh Nicholas.

Sedangkan berikut ini adalah contoh penggunaan Nokogiri untuk melakukan parsing dokumen HTML yang dihasilkan saat melakukan pencarian dengan kata kunci 'rails' pada google.com.

#!/usr/bin/ruby

require 'rubygems'
require 'nokogiri'
require 'open-uri'

doc = Nokogiri::HTML(open('http://www.google.com/search?q=rails'))

# menampilkan 'title' dan dari halaman google.com ketika mencari keyword 'rails'
doc.css('h3.r a.l').each do |link|
puts "#{link.content} - #{link[:href]}"
end


Instalasi

gem install nokogiri




No comments:

Post a Comment

© Railsmine