バグと思ったが仕様を読んでいなかった
require 'rexml/document' doc = REXML::Document.new("<x>a<![CDATA[a]]></x>")
この状況下で
p doc.elements['/x'].text "a"
となる。こまったもんだ。
CDATAといえば、REXMLでこういう罠にはまったことが。
ところが、マニュアルから以下の記述を発見
_最初_の子テキストの値を返す便利メソッドです.もし, 子テキストがなければnilを返します.
複数のTextノードを持つかもしれないことに注意してく ださい.おそらく,他の子ノードで区切られているのでしょ う.このメソッドは最初のTextノードの値しか返さな いことを覚えておいてください.
なんと!最初だけだったのか、その下にtextsメソッドがあるじゃありませんか。
全ての子Textの配列を返します.
p doc.elements['/x'].texts.join "aa"
見事解決。しかし、text要素が複数ってどういう意味なんだろう??