def self.from_obj(obj, namespace = nil)
return obj if obj.is_a?(SOAPElement)
o = SOAPElement.new(nil)
case obj
when nil
o.text = nil
when Hash, Array
obj.each do |name, value|
addname, is_attr = parse_name(name, namespace)
if value.is_a?(Array)
value.each do |subvalue|
if is_attr
o.extraattr[addname] = subvalue
else
child = from_obj(subvalue, namespace)
child.elename = addname
o.add(child)
end
end
else
if is_attr
o.extraattr[addname] = value
else
child = from_obj(value, namespace)
child.elename = addname
o.add(child)
end
end
end
else
o.text = obj.to_s
end
o
end