要約
XML のテキストノードを表すクラスです。
注意: Ruby 2.0.0 以前では、バグのため entity_filter の機能は正しく動作しません。
目次
- 特異メソッド
- インスタンスメソッド
継承しているメソッド
- Comparableから継承しているメソッド
- REXML::Childから継承しているメソッド
- REXML::Nodeから継承しているメソッド
特異メソッド
new(arg, respect_whitespace = false, parent = nil, raw = nil, entity_filter = nil, illegal = REXML::Text::NEEDS_A_SECOND_CHECK)
[permalink][rdoc][edit]-
テキストノードオブジェクトを生成します。
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 は内部用なので使わないでください。
- [PARAM] arg:
- テキストデータ(文字列)もしくは元データの REXML::Text オブジェクト
- [PARAM] respect_whitespace:
- 空白を保存するかどうかを決める真偽値
- [PARAM] parent:
- 親ノード
- [PARAM] raw:
- テキストのエスケープの挙動を決める値
- [PARAM] entity_filter:
- 置換したい実体の名前の配列
- [PARAM] illegal:
- ライブラリ内部用
- [EXCEPTION] RuntimeError:
- テキストがXMLのテキストとして不正な文字を含んでいる場合に発生します。
例
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][edit]-
input を正規化(すべての entity をエスケープ)したものを返します。
- [PARAM] input:
- 正規化する文字列
- [PARAM] doctype:
- DTD(REXML::DocType オブジェクト)
- [PARAM] entity_filter:
- 置換したい実体の名前の配列
unnormalize(string, doctype = nil, filter = nil, illegal = nil) -> String
[permalink][rdoc][edit]-
string を非正規化(すべての entity をアンエスケープ)したものを返します。
filter でアンエスケープしない実体の実体名を文字列配列で指定します。
- [PARAM] string:
- 非正規化する文字列
- [PARAM] doctype:
- DTD(REXML::DocType オブジェクト)
- [PARAM] filter:
- アンエスケープしない実体の実体名(文字列配列)
- [PARAM] illegal:
- 内部用。使わないでください。
例
require 'rexml/text' REXML::Text.unnormalize("& &foobar; <") # => "& &foobar; <" REXML::Text.unnormalize("< >", nil, ["lt"]) # => "< >"
インスタンスメソッド
self <=> other -> -1 | 0 | 1
[permalink][rdoc][edit]-
テキストの内容を other と比較します。
- [PARAM] other:
- 比較対象(REXML::Text オブジェクトもしくは文字列)
clone -> REXML::Text
[permalink][rdoc][edit]-
self を複製します。
doctype -> REXML::DocType | nil
[permalink][rdoc][edit]-
テキストノードが属する文書の DTD を返します。
そのような文書(REXML::Document)が存在しない、すなわちテキストノードの親ノードを辿っても REXML::Document に到達しない、場合には nil を返します。
[SEE_ALSO] REXML::DocType
empty? -> bool
[permalink][rdoc][edit]-
テキストが空ならば真を返します。
node_type -> Symbol
[permalink][rdoc][edit]-
Symbol :text を返します。
raw -> bool
[permalink][rdoc][edit]-
"raw" モードであれば真を返します。
raw モードについては REXML::Text.new を参考にしてください。
[SEE_ALSO] REXML::Text#raw=
raw=(value)
[permalink][rdoc][edit]-
"raw" モードの設定を変更します。
raw モードについては REXML::Text.new を参考にしてください。
- [PARAM] value:
- 設定する真偽値
[SEE_ALSO] REXML::Text#raw
to_s -> String
[permalink][rdoc][edit]-
テキストの内容を正規化(すべての実体をエスケープ)された状態で返します。
つまり返り値は 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][edit]-
テキストの内容を非正規化(すべての実体をアンエスケープ)された状態で返します。
このメソッドの返り値では 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][edit]-
テキストの内容を 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>"