#!/usr/bin/perl -w

use strict;
use SOAP::Lite;
use SOAP::Data::Builder;
use Data::Dumper;

my $products = [
		{productOffering => 'XPD-2333', action => 'add', setting => [
									   {settingName=>'Speed',settingValue=>'256'},
									   {settingName=>'Name',settingValue=>'test'},
									  ]
		},
	       ];

my $builder = SOAP::Data::Builder->new();
foreach my $product (@{$products}) {
    my $this_product = $builder->add_elem(name=>'Product');
    warn "this product : $this_product\n";
    foreach (qw/productOffering action/) {
	next unless exists $product->{$_};
	$builder->add_elem(name=>$_, value=>$product->{$_}, parent=>$this_product);
    }

    my @settings = ();
    foreach my $setting (@{$product->{setting}}) {
	my $this_setting = $this_product->add_elem(name=>'setting');
	warn "this_setting : $this_setting\n";
	foreach (qw/settingName settingValue/) {
	    $this_setting->add_elem(name=>$_, value=>$setting->{$_},);
	}
    }
}

my $data = SOAP::Data->name('soap:env' => \SOAP::Data->value($builder->to_soap_data ));

my $serialized_xml = SOAP::Serializer->autotype(0)->serialize( $data );

print $serialized_xml;
print Dumper($soap_data_builder->elems());


syntax highlighted by Code2HTML, v. 0.9.1