Ruby:
Работа с XML

Как:

Давайте используем REXML, включенный в Ruby, для разбора фрагмента 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') { |element|
  puts "Имя: #{element.attributes['name']}, Цвет: #{element.attributes['color']}"
}

Вывод:

Имя: apple, Цвет: green
Имя: banana, Цвет: yellow

Генерация XML также проста:

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:

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

Подробнее:

Корни XML уходят в 1990-е годы как упрощенный поднабор SGML для веб-документов. XML громоздкий, но высоко структурированный, и именно поэтому он до сих пор актуален. Это не единственный вариант - JSON и YAML стали популярными благодаря своей простоте - но XML остается востребованным во многих предприятиях и устаревших системах.

Ruby предлагает несколько способов работы с XML. REXML - это библиотека на чистом Ruby, которая легка в освоении. Nokogiri - это гем, который использует более быстрые библиотеки C, предлагая скорость и дополнительные функции. Что выбрать? Начните с REXML для небольших задач и переходите к Nokogiri, если вам нужна большая мощность.

Внутри, анализ XML сводится к преобразованию строк в модели DOM или SAX. DOM создает дерево в памяти, в то время как SAX стримит документ и инициирует события во время его разбора. REXML предлагает обе модели, но склонен быть медленнее, чем расширения C, такие как используемые Nokogiri.

Смотрите также: