Ruby:
XML:n käsittely

Kuinka:

Käytetään REXML:ää, joka sisältyy Rubyyn, XML-katkelman jäsentämiseen:

require 'rexml/document'
include REXML

xml_data = <<-XML
<fruits>
  <fruit name="apple" color="green"/>
  <fruit name="banana" color="yellow"/>
</fruits>
XML

document = Document.new(xml_data)
document.elements.each('fruits/fruit') do |element|
  puts "Nimi: #{element.attributes['name']}, Väri: #{element.attributes['color']}"
end

Tuloste:

Nimi: apple, Väri: green
Nimi: banana, Väri: yellow

XML:n luominen on myös suoraviivaista:

doc = Document.new
doc.add_element 'fruits'
apple = doc.root.add_element 'fruit', {'name' => 'apple', 'color' => 'green'}
banana = doc.root.add_element 'fruit', {'name' => 'banana', 'color' => 'yellow'}
puts doc

XML-tuloste:

<fruits>
  <fruit name="apple" color="green"/>
  <fruit name="banana" color="yellow"/>
</fruits>

Syvä sukellus:

XML:n juuret juontavat 1990-luvulle yksinkertaistettuna alajoukkona SGML:lle web-dokumentteja varten. Se on verbaliinen mutta erittäin rakenteellinen, ja siksi se on pysynyt mukana. Se ei ole ainoa peli kaupungissa – JSON ja YAML ovat tulleet suosituiksi niiden yksinkertaisuuden vuoksi – mutta XML pitää pintansa monissa yritys- ja perintöjärjestelmissä.

Ruby tarjoaa muutamia tapoja käsitellä XML:ää. REXML on kokonaan Rubylla kirjoitettu kirjasto, joka on helppo ottaa käyttöön. Nokogiri on gem, joka käärii nopeampia C-kirjastoja, tarjoten nopeutta ja lisäominaisuuksia. Valinta niiden välillä? Aloita REXML:llä pienempiin tehtäviin ja siirry Nokogiriin, jos tarvitset enemmän tehoa.

Taustalla XML:n jäsentäminen on merkkijonojen kääntämistä DOM- tai SAX-malleiksi. DOM luo muistiin puun, kun taas SAX virtaa dokumentin läpi ja laukaisee tapahtumia sen jäsentäessä. REXML tarjoaa molemmat mallit, mutta on yleensä hitaampi kuin C-laajennukset, joita Nokogiri käyttää.

Katso myös: