# File soap/encodingstyle/soapHandler.rb, line 32
  def encode_data(generator, ns, qualified, data, parent)
    attrs = encode_attrs(generator, ns, data, parent)

    if parent && parent.is_a?(SOAPArray) && parent.position
      attrs[ns.name(AttrPositionName)] = "[#{ parent.position.join(',') }]"
    end

    name = nil
    if qualified and data.elename.namespace
      SOAPGenerator.assign_ns(attrs, ns, data.elename.namespace)
      name = ns.name(data.elename)
    else
      name = data.elename.name
    end

    case data
    when SOAPReference
      attrs['href'] = data.refidstr
      generator.encode_tag(name, attrs)
    when SOAPExternalReference
      data.referred
      attrs['href'] = data.refidstr
      generator.encode_tag(name, attrs)
    when SOAPRawString
      generator.encode_tag(name, attrs)
      generator.encode_rawstring(data.to_s)
    when XSD::XSDString
      generator.encode_tag(name, attrs)
      generator.encode_string(@charset ?
        XSD::Charset.encoding_to_xml(data.to_s, @charset) : data.to_s)
    when XSD::XSDAnySimpleType
      generator.encode_tag(name, attrs)
      generator.encode_string(data.to_s)
    when SOAPStruct
      generator.encode_tag(name, attrs)
      data.each do |key, value|
        yield(value, false)
      end
    when SOAPArray
      generator.encode_tag(name, attrs)
      data.traverse do |child, *rank|
        data.position = data.sparse ? rank : nil
        yield(child, false)
      end
    else
      raise EncodingStyleError.new(
        "Unknown object:#{ data } in this encodingStyle.")
    end
  end