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"