sub tag { my ($self, $tag, $attrs, @values) = @_; my $readable = $self->{ _readable }; my $value = join '', @values; my $indent = $readable ? ' ' x (($self->{ _level }-1)*2) : ''; # check for special attribute return "$indent$value" if exists $attrs->{_xml} && delete $attrs->{_xml}; die "Element '$tag' can't be allowed in valid XML message. Died." if $tag !~ /^$SOAP::Constants::NSMASK$/o; [b] warn "Element '$tag' uses the reserved prefix 'XML' (in any case)" [/b] if $tag !~ /^(?![Xx][Mm][Ll])/; my $prolog = $readable ? "\n" : ""; my $epilog = $readable ? "\n" : ""; my $tagjoiner = " "; if ($self->{ _level } == 1) { my $namespaces = $self->namespaces; foreach (keys %$namespaces) { $attrs->{SOAP::Utils::qualify(xmlns => $namespaces->{$_})} = $_ } $prolog = qq!encoding]}"?>! if defined $self->encoding; $prolog .= "\n" if $readable; $tagjoiner = " \n".(' ' x 4 ) if $readable; } my $tagattrs = join($tagjoiner, '', map { sprintf '%s="%s"', $_, SOAP::Utils::encode_attribute($attrs->{$_}) } grep { $_ && defined $attrs->{$_} && ($_ ne 'xsi:type' || $attrs->{$_} ne '') } keys %$attrs); if ($value gt '') { return sprintf("$prolog$indent<%s%s>%s%s$epilog",$tag,$tagattrs,$value,($value =~ /^\s*$epilog$indent",$tag,$tagattrs); } }