須藤です.

結構前のメールですが.

In <EB4BD35C-6765-11D8-899C-0003934B656A / konishi-p.co.jp>
  "[ruby-list:39270] OSX + REXML" on Wed, 25 Feb 2004 16:41:17 +0900,
  Mitsuru Koyama <mit / konishi-p.co.jp> wrote:
> OS =>	Mac OSX 10.3.2
> ruby =>	1.8.1 (2003-12-25) [powerpc-darwin] ※ソースからインストールしました。
> 
> 上記の環境にて、「Ruby de XML」のサンプルスクリプトを動かしていますが、
> 思うような結果が得られません。別の環境(Linux)では大丈夫なようです。

(たぶん)2.5.x以降のREXMLでXPathのpreceding軸が正常に動作し
ない問題ですが,先日リリースされたREXML 3.1.2で修正されまし
た.

  http://www.germane-software.com/archives/rexml_3.1.2.tgz


また,RubyのCVS HEADでは,今回のリリースより前にこの問題の修
正が反映されています.


実際に以下のスクリプトを実行して,

> 【検証用スクリプト】本の内容とは異なります
> ---->
> require("rexml/document")
> 
> source = <<-XML
> <?PI context?>
> <a>
> 	<!--COMMENT A-->
> 	<fuga:b xmlns:fuga='http://fuga.com/'>
> 		<!-- COMMENT FUGA:B -->
> 		<c number='1'>TEXT</c>
> 	</fuga:b>
> 	<d xml:lang='ja'>
> 		<e xml:lang='en'/>
> 		<f/>
> 	</d>
> 	<b><!-- COMMENT B --></b>
> </a>
> XML
> doc = REXML::Document.new(source)
> 
> print	"■対象ノードセット中逆文書順でノードを選択\n"
> xpath = "/a/b/preceding::node()"
> res = REXML::XPath.match( doc, xpath )
> i = 1;
> res.collect	{ |node|
> 	print "[#{i}]=>"; p node.to_s
> 	i += 1
> }
> print "\n---------\n\n"
> <----

以下のような結果がでることを確認しました.

> [1]=>"\n\t"
> [2]=>"\n\t"
> [3]=>"<f/>"
> [4]=>"\n\t\t"
> [5]=>"<e xml:lang='en'/>"
> [6]=>"\n\t\t"
> [7]=>"<d xml:lang='ja'>\n\t\t<e xml:lang='en'/>\n\t\t<f/>\n\t</d>"
> [8]=>"\n\t"
> [9]=>"\n\t"
> [10]=>"TEXT"
> [11]=>"<c number='1'>TEXT</c>"
> [12]=>"\n\t\t"
> [13]=>" COMMENT FUGA:B "
> [14]=>"\n\t\t"
> [15]=>"<fuga:b xmlns:fuga='http://fuga.com/'>\n\t\t<!-- COMMENT FUGA:B 
> -->\n\t\t<c number='1'>TEXT</c>\n\t</fuga:b>"
> [16]=>"\n\t"
> [17]=>"COMMENT A"
> [18]=>"\n\t"
> 
> ---------