Hi,
XPath parser of REXML 3.1.6 has a problem related white
space. We can meet the problem by function call with string
which starts with “\nALPHABET”.
The following is patch and test case:
diff -ru rexml_3.1.6.orig/src/rexml/parsers/xpathparser.rb
rexml_3.1.6/src/rexml/parsers/xpathparser.rb
— rexml_3.1.6.orig/src/rexml/parsers/xpathparser.rb 2006-11-28
22:54:57.000000000 +0900
+++ rexml_3.1.6/src/rexml/parsers/xpathparser.rb 2007-01-06
15:52:41.000000000 +0900
@@ -551,7 +551,7 @@
end
end
#puts “BEFORE WITH ‘#{rest}’”
-
rest = LocationPath(rest, n) if rest =~ /^[\/\.\@\[\w_*]/
-
rest = LocationPath(rest, n) if rest =~ /\A[\/\.\@\[\w_*]/ parsed.concat(n) return rest end
diff -ru rexml_3.1.6.orig/test/functions.rb
rexml_3.1.6/test/functions.rb
— rexml_3.1.6.orig/test/functions.rb 2006-11-28 22:54:56.000000000
+0900
+++ rexml_3.1.6/test/functions.rb 2007-01-06 15:53:40.000000000 +0900
@@ -212,4 +212,12 @@
assert_equal( “A”, REXML::XPath.first(document, ‘//b[.=“A”]’).text
)
assert_equal( “1”, REXML::XPath.first(document, ‘//b[.=“1”]’).text
)
end
+
- def test_normalize_space
- source = “”
- doc = REXML::Document.new(source)
- predicate = “string(.)=normalize_space(’\nCOMMENT \n A \n\n ')”
- m = REXML::XPath.match(doc, “//comment()[#{predicate}]”)
- assert_equal( [REXML::Comment.new(“COMMENT A”)], m )
- end
end
Thanks,