singleton method REXML::Text.new

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の規格上以下の実体参照/対応文字がデフォルトで使われます。

  • & &
  • &lt; <
  • &gt; >
  • &quot; "
  • &apos; '

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  # => "&lt;&amp;"
p REXML::Text.new("&lt;&amp;", false, nil, false).to_s # => "&amp;lt;&amp;amp;"
p REXML::Text.new("&lt;&amp;", false, nil, true).to_s # => "&lt;&amp;"
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 # => "&amp;&q;"
REXML::Text.new("quzz", false, doc.root, true).to_s # => "quzz"