Блог

Ruby: Работа с XML

Краткая информация о REXML и Builder.
Использование REXML

#!/usr/bin/env ruby

require 'rexml/document'
include REXML
profile = <<XML
<structur>
  <profile>
    <firstname>FirstName</firstname>
    <lastname>LastName</lastname>
  </profile>
  <address>City beautiful</address>
  <description>This is TEST</description>
</structur>
XML

dom = Document.new profile
puts dom

Генерация XML, через REXML

#!/usr/bin/env ruby

require 'rexml/document'
include REXML

dom = Document.new
dom << XMLDecl.new('1.0', 'UTF-8')
dom << Comment.new("This is test comment")
dom.add_element('profile', {'lang'=>'en'})

first_name = dom.root.add_element('firstname').text = 'First name'
last_name = dom.root.add_element('lastname').text = 'Last name'

puts dom.write($stdout,  0)

XMLDecl.new – декларация XML, без параметров создает по умолчанию базовую декларацию XML.
Comment.new – создает для вставки в документ комментарий с текстом.
add_element – добавляет к документу имя корневого элемента

XML Builder 
XML Builder – еще одно средство создания XML от Джима Вейриха.

#!/usr/bin/env ruby

require 'rubygems'
require 'builder'

profile = <<XML
<structur>
  <profile>
    <firstname>FirstName</firstname><lastname>LastName</lastname>
  </profile>
  <address>City beautiful</address><description>This is TEST</description>
</structur>
XML

dom = Builder::XmlMarkup.new(:target=>profile, :indent=>1)
puts dom.to_xs

Генерация XML через Builder

#!/usr/bin/env ruby

require 'rubygems'
require 'builder'

include Builder

profile = ''
dom = XmlMarkup.new(:target=>profile, :indent=>1)
dom.instruct!
dom.comment! "This is short test."

dom.profile(:lang=>'en') {
  dom.first_name 'Firs name', :nickname => 'false'
  dom.last_name  'Last name'
}

puts dom.to_xs

instruct! – Описание XML форматирования.
comment! – Добавляем комментарии к документу.
profile(:lang=>’en’) { … } – представление отношение “родитель – потомок”