Ruby:
Praca z XML

Jak to zrobić:

Użyjmy REXML, dołączonego do Ruby, aby przetworzyć fragment XML:

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 "Nazwa: #{element.attributes['name']}, Kolor: #{element.attributes['color']}"
end

Wyjście:

Nazwa: apple, Kolor: zielony
Nazwa: banana, Kolor: żółty

Generowanie XML jest równie proste:

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

Wyjście XML:

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

Pogłębiona analiza:

Korzenie XML sięgają lat 90. jako uproszczony podzestaw SGML dla dokumentów internetowych. Jest rozwlekły, ale bardzo strukturalny, i to dlaczego nadal się utrzymuje. Nie jest jedyną opcją – JSON i YAML stały się popularne ze względu na swoją prostotę – ale XML utrzymuje silną pozycję w wielu systemach korporacyjnych i dziedzicznych.

Ruby oferuje kilka sposobów na radzenie sobie z XML. REXML to biblioteka całkowicie w Ruby, która jest łatwa do zrozumienia. Nokogiri to gem, który opakowuje szybsze biblioteki C, oferując szybkość i dodatkowe funkcje. Co wybrać? Zacznij od REXML do mniejszych zadań i przejdź do Nokogiri, jeśli potrzebujesz więcej mocy.

Pod spodem, parsowanie XML to przekładanie ciągów znaków na modele DOM lub SAX. DOM tworzy drzewo w pamięci, podczas gdy SAX strumieniuje dokument i generuje zdarzenia w miarę parsowania. REXML oferuje oba modele, ale ma tendencję do bycia wolniejszym niż rozszerzenia C używane przez Nokogiri.

Zobacz również: