バグと思ったが仕様を読んでいなかった

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要素が複数ってどういう意味なんだろう??