# File lib/soap/baseData.rb, line 770
  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