Ruby 1.8.7 リファレンスマニュアル > ライブラリ一覧 > rexml/documentライブラリ > REXML::Textクラス
クラスの継承リスト: REXML::Text < Comparable < REXML::Child < REXML::Node < Object < Kernel
XML のテキストノードを表すクラスです。
注意: Ruby 2.0.0 以前では、バグのため entity_filter の機能は正しく動作しません。
new(arg, respect_whitespace = false, parent = nil, raw = nil, entity_filter = nil, illegal = REXML::Text::NEEDS_A_SECOND_CHECK)
[permalink][rdoc]テキストノードオブジェクトを生成します。
arg でノードの内容を指定します。 文字列の場合はそれが内容として使われます。 REXML::Text オブジェクトの場合はその内容が複製されます。
respect_whitespace に真を指定すると、arg に含まれる空白文字は保存されます。 偽の場合は空白はまとめられます。
raw は true, false, nil のいずれかを指定し、生成されるテキストノードが raw モードであるかどうかを決めます。 true の場合、そのノードは raw モードであると解釈され、 テキストにはエスケープされていないXMLマークアップは 含まれていないと仮定し、テキストの内容は変更されません。 falseの場合、そのノードは raw モードであると解釈され、 rexml はテキストに含まれているすべての(定義済み)実体を エスケープします nilの場合、親ノードが raw モードであるかどうかで self が raw モードになるかどうかが決まります。 arg に REXML::Text オブジェクトを渡した場合は、この値は無視され arg が raw モードであるかどうかが使われます。
entity_filter は置き換えたい実体のリストを文字列の配列で指定します。 これは raw が false のときのみ意味を持ちます。 entity_filter が nil の場合(デフォルトの場合)、 テキストがどのようにエスケープされるかは、そのノードが属する 文書(REXML::Document)の DTD(REXML::DocType, REXML::Document#doctype) で定義されます。DTD が与えられていない場合は、XMLの規格上 以下の実体参照/対応文字がデフォルトで使われます。
illegal は内部用なので使わないでください。
doctype なしの場合
p REXML::Text.new("<&", false, nil, false).to_s # => "<&" p REXML::Text.new("<&", false, nil, false).to_s # => "&lt;&amp;" p REXML::Text.new("<&", false, nil, true).to_s # => "<&" p REXML::Text.new("<&", false, nil, true).to_s # parse error
doctype があり、実体が宣言されている場合
require 'rexml/document' doc = REXML::Document.new(<<EOS) doctype = REXML::Document.new(<<EOS).doctype <!DOCTYPE root [ <!ENTITY p "foobar publisher"> <!ENTITY % q "quzz"> ]> <root /> EOS REXML::Text.new("&quzz", false, doc.root, false).to_s # => "&&q;" REXML::Text.new("quzz", false, doc.root, true).to_s # => "quzz"
normalize(input, doctype = nil, entity_filter = nil) -> String
[permalink][rdoc]input を正規化(すべての entity をエスケープ)したものを 返します。
unnormalize(string, doctype = nil, filter = nil, illegal = nil) -> String
[permalink][rdoc]string を非正規化(すべての entity をアンエスケープ)したものを 返します。
filter でアンエスケープしない実体の実体名を文字列配列で指定します。
require 'rexml/text' REXML::Text.unnormalize("& &foobar; <") # => "& &foobar; <" REXML::Text.unnormalize("< >", nil, ["lt"]) # => "< >"
self <=> other -> -1 | 0 | 1
[permalink][rdoc]テキストの内容を other と比較します。
clone -> REXML::Text
[permalink][rdoc]self を複製します。
doctype -> REXML::DocType | nil
[permalink][rdoc]テキストノードが属する文書の DTD を返します。
そのような文書(REXML::Document)が存在しない、すなわち テキストノードの親ノードを辿っても REXML::Document に到達しない、 場合には nil を返します。
[SEE_ALSO] REXML::DocType
empty? -> bool
[permalink][rdoc]テキストが空ならば真を返します。
node_type -> Symbol
[permalink][rdoc]Symbol :text を返します。
raw -> bool
[permalink][rdoc]"raw" モードであれば真を返します。
raw モードについては REXML::Text.new を参考にしてください。
[SEE_ALSO] REXML::Text#raw=
raw=(value)
[permalink][rdoc]"raw" モードの設定を変更します。
raw モードについては REXML::Text.new を参考にしてください。
[SEE_ALSO] REXML::Text#raw
to_s -> String
[permalink][rdoc]テキストの内容を正規化(すべての実体をエスケープ)された状態で返します。
つまり返り値は XML のテキストとして妥当です。
結果は REXML::Text.new で指定した entity_filter を反映しています。
[SEE_ALSO] REXML::Text#value
require 'rexml/document' t = REXML::Text.new("< & foobar", false, nil, false) t.to_s # => "< & foobar" t.value # => "< & foobar"
value -> String
[permalink][rdoc]テキストの内容を非正規化(すべての実体をアンエスケープ)された状態で返します。
このメソッドの返り値では raw モードや entity_filter は無視されます。
[SEE_ALSO] REXML::Text#raw, REXML::Text#to_s
require 'rexml/document' t = REXML::Text.new("< & foobar", false, nil, false) t.to_s # => "< & foobar" t.value # => "< & foobar"
value=(val)
[permalink][rdoc]テキストの内容を val に変更します。
val には非正規化された(エスケープされていない)文字列を渡さなければ なりません。
require 'rexml/document' e = REXML::Element.new("a") e.add_text("foo") e[0].value = "bar" e.to_s # => "<a>bar</a>" e[0].value = "<a>" e.to_s # => "<a><a></a>"