library rexml/document

[edit]

要約

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 をパースするための正規表現を保持しているモジュールです。