summaryrefslogtreecommitdiff
path: root/lib/rexml
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rexml')
-rw-r--r--lib/rexml/functions.rb33
1 files changed, 24 insertions, 9 deletions
diff --git a/lib/rexml/functions.rb b/lib/rexml/functions.rb
index b84209619d..0f91fcd23f 100644
--- a/lib/rexml/functions.rb
+++ b/lib/rexml/functions.rb
@@ -136,21 +136,36 @@ module REXML
# An object of a type other than the four basic types is converted to a
# string in a way that is dependent on that type.
def Functions::string( object=nil )
- #object = @context unless object
- if object.instance_of? Array
- string( object[0] )
- elsif defined? object.node_type
- if object.node_type == :attribute
+ object = @@context[:node] if object.nil?
+ if object.respond_to?(:node_type)
+ case object.node_type
+ when :attribute
object.value
- elsif object.node_type == :element || object.node_type == :document
+ when :element
string_value(object)
+ when :document
+ string_value(object.root)
+ when :processing_instruction
+ object.content
else
object.to_s
end
- elsif object.nil?
- return ""
else
- object.to_s
+ case object
+ when Array
+ string(object[0])
+ when Numeric
+ integer = object.to_i
+ if object == integer
+ "%d" % integer
+ else
+ object.to_s
+ end
+ when nil
+ ""
+ else
+ object.to_s
+ end
end
end