#!/usr/bin/perl
use 5.006;
use strict;
use warnings;
use SOAP::Lite +trace => [ 'debug' ];
my $req1 = SOAP::Lite->new(
readable => 1,
autotype => 0,
proxy => 'https://ics2wstest.ic3.com/commerce/1.x/transactionProcessor',
);
# req1 does not generate the XML attribute <item id="0"> it just generates
# <item>
$req1->requestMessage(
\SOAP::Data->new(
name => 'item',
attr => { id => '0' },
value => \SOAP::Data->new(
name => 'foo',
value => 1,
),
),
);
我得到这个XML (注意:这是重要的部分)
<item>
<foo>1</foo>
</item>
我不明白为什么我没有得到这个XML
<item id="0">
<foo>1</foo>
</item>
任何人都可以告诉我如何生成属性吗?
注意:这几乎相同(而不是命名属性id
,它的名称为foo
)代码有效。所以我认为这可能是bug
$req->requestMessage(
\SOAP::Data->new(
name => 'item',
attr => { foo => '0' },
value => \SOAP::Data->new(
name => 'foo',
value => 1,
),
),
);
答案 0 :(得分:2)
更新: Fixed in 0.714
它与SOAP :: Lite或SOAP使用的东西相冲突
sub xmlize {
my $self = shift;
my($name, $attrs, $values, $id) = @{+shift};
$attrs ||= {};
local $self->{_level} = $self->{_level} + 1;
return $self->tag($name, $attrs)
unless defined $values;
return $self->tag($name, $attrs, $values)
unless UNIVERSAL::isa($values => 'ARRAY');
return $self->tag($name, {%$attrs, href => '#'.$self->multiref_anchor($id)})
if $self->is_href($id, delete($attrs->{_id}));
return $self->tag($name,
{
%$attrs, id => $self->multiref_anchor($id) <-------- Clobbers your id
},
map {$self->xmlize($_)} @$values
);
}
我认为这就是你的身份丢失的地方。并且代码部分在0.714中改变了
答案 1 :(得分:0)
你能尝试在id
附近加注?也许这会奏效。