要約
DOM スタイルの XML パーサ。
REXML::Document.new で XML 文書から DOM ツリーを構築し、ツリーのノードの各メソッドで文書の内容にアクセスします。
以下のプログラムではブックマークの XML からデータを取り出します。
require 'rexml/document'
require 'pp'
Bookmark = Struct.new(:href, :title, :desc)
doc = REXML::Document.new(<<XML)
<?xml version="1.0" encoding="UTF-8" ?>
<xbel version="1.0">
<bookmark href="http://www.ruby-lang.org/ja/">
<title>オブジェクト指向スクリプト言語 Ruby</title>
<desc>Rubyの公式サイト</desc>
</bookmark>
<bookmark href="http://rurema.clear-code.com/">
<title>最速Rubyリファレンスマニュアル検索! | るりまサーチ</title>
<desc>Rubyリファレンスマニュアルを全文検索できる。
とても便利。
</desc>
</bookmark>
<bookmark href="https://github.com/rurema/bitclust">
<title>rurema/bitclust · GitHub</title>
</bookmark>
<bookmark href="https://rubygems.org/gems/bitclust-core" />
</xbel>
XML
bookmarks = REXML::XPath.match(doc, "/xbel/bookmark").map do |bookmark|
href = bookmark.attribute("href").value
title_element = bookmark.elements["title"]
title = title_element ? title_element.text : nil
desc_element = bookmark.elements["desc"]
desc = desc_element ? desc_element.text : nil
Bookmark.new(href, title, desc)
end
pp bookmarks
# >> [#<struct Bookmark
# >> href="http://www.ruby-lang.org/ja/",
# >> title="オブジェクト指向スクリプト言語 Ruby",
# >> desc="Rubyの公式サイト">,
# >> #<struct Bookmark
# >> href="http://rurema.clear-code.com/",
# >> title="最速Rubyリファレンスマニュアル検索! | るりまサーチ",
# >> desc="Rubyリファレンスマニュアルを全文検索できる。\nとても便利。\n ">,
# >> #<struct Bookmark
# >> href="https://github.com/rurema/bitclust",
# >> title="rurema/bitclust · GitHub",
# >> desc=nil>,
# >> #<struct Bookmark
# >> href="https://rubygems.org/gems/bitclust-core",
# >> title=nil,
# >> desc=nil>]
クラス
REXML::Attribute | 要素(REXML::Element)の属性を表すクラスです。 |
REXML::Child | あるノード(親ノード)に子ノードとして保持されているノードを表すクラスです。 |
REXML::AttlistDecl | DTD の属性リスト宣言を表すクラスです。 |
REXML::Comment | XML コメントを表すクラス。 |
REXML::Declaration | DTD に含まれる各種宣言ノードを表すクラスです。 |
REXML::ElementDecl | DTD の要素宣言(Element Declaration)を表すクラスです。 |
REXML::Entity | XML における実体(エンティティ、entity)の宣言(declaration)を表わすクラス。 |
REXML::ExternalEntity | DTD 内の宣言でパラメータ実体参照を使って宣言がされているものを表わすクラスです。 |
REXML::Instruction | XML 処理命令(XML Processing Instruction, XML PI)を表すクラス。 |
REXML::NotationDecl | DTD の記法宣言を表すクラスです。 |
REXML::Parent | あるノードの親ノードとなりうるノードを表すクラスです。 |
REXML::DocType | XML の DTD(文書型定義、Document Type Definition)を表すクラスです。 |
REXML::Element | XML の要素(エレメント、element)を表すクラス。 |
REXML::Document | XMLの完全な文書(ドキュメント)を表すクラス。 |
REXML::Text | XML のテキストノードを表すクラスです。 |
REXML::CData | XML の cdata セクションを表すクラス |
REXML::XMLDecl | XML 宣言を表すクラス。 |
REXML::Elements | 要素の集合を表すクラスです。 |
REXML::Formatters::Default | XMLドキュメントを(文字列として)出力するクラスです。 |
REXML::Formatters::Pretty | XMLドキュメントを(文字列として)見た目良く出力するクラスです。 |
REXML::Formatters::Transitive | XMLドキュメントをテキストの内容を変えずに多少の整形を加えて出力するクラスです。 |
REXML::Output | 出力先を wrap するクラスです。内部用なのでユーザは使わないでください。 |
REXML::Parsers::BaseParser | 内部用です。使わないでください。 |
REXML::Parsers::TreeParser | 内部用です。使わないでください。 |
REXML::Parsers::XPathParser | XPath 文字列をパースするための内部的なクラスです。 |
REXML::Source | 内部用なのでユーザは使わないでください。 |
REXML::IOSource | 内部用なのでユーザは使わないでください。 |
REXML::SourceFactory | 内部用なのでユーザは使わないでください。 |
REXML::XPath | XPath を取り扱うためのクラスです。 |
REXML::Attributes | 属性の集合を表すクラスです。 |
モジュール
REXML::Encoding | rexml ライブラリでエンコーディングを取り扱うための内部的なモジュールです。 |
REXML::EntityConst | XML の標準的な実体(エンティティ)を保持しているモジュールです。 |
REXML::Functions | 内部用なのでユーザは使わないでください。 |
REXML::Namespace | XML 名前空間によって管理される「名前」を持つようなノードを表すモジュール。 |
REXML::Node | XML tree 上のノードを表すモジュール。 |
REXML::Security | REXML のセキュリティ関連の限界値を設定/参照するためのモジュールです。 |
REXML::XMLTokens | XML をパースするための正規表現を保持しているモジュールです。 |