我对SOAP,PERL以及我要求做的其他所有事情都很陌生,所以我希望有人可以指出我正确的方向。
我已经实现了一个简单的WCF解决方案,并且我编写了一个PERL客户端,它使用SOAP :: lite和SOAP :: Data将“复杂数据结构”传递给解决方案。到目前为止,所有这一切都运行良好,WCF解决方案看到数组作为一个数组,我能够在服务器端迭代遍历数组。
但是,我在尝试将数据元素附加到PERL端的数组时遇到问题。我有以下代码,它构建我需要的数组,但我需要在代码中稍后向数组添加几行,我无法弄清楚如何。
# build array of values
my $data= SOAP::Data->new
(name => 'array', value =>
[
SOAP::Data->new(name => 'elem:string', value => 'firststring'),
SOAP::Data->new(name => 'elem:string', value => 'secondstring'),
SOAP::Data->new(name => 'elem:string', value => 'thridstring')
]
)
->attr
(
{ 'xmlns:elem' => 'http://schemas.microsoft.com/2003/10/Serialization/Arrays','xmlns:i' => 'http://www.w3.org/2001/XMLSchema-instance'}
);
# create a new element
my $elem1 = SOAP::Data->new(name => 'elem:string', value => 'addedstring');
# try to add the element
push(@{$data->{array}},$elem1);
#.... send, catch, print.. bla bla bla
我运行的代码,WCF服务看到的数组很好,但$ elem1值实际上从未附加到SOAP信封。
非常感谢任何帮助...
答案 0 :(得分:2)
看看使用Data :: Dumper的$ data是什么,你得到这个
$VAR1 = bless( {
'_attr' => {
'xmlns:i' => 'http://www.w3.org/2001/XMLSchema-instance',
'xmlns:elem' => 'http://schemas.microsoft.com/2003/10/Serialization/Arrays'
},
'_signature' => [],
'_name' => 'array',
'_value' => [
[
bless( {
'_value' => [
'firststring'
],
'_name' => 'string',
'_prefix' => 'elem',
'_signature' => [],
'_attr' => {}
}, 'SOAP::Data' ),
bless( {
'_value' => [
'secondstring'
],
'_name' => 'string',
'_signature' => [],
'_prefix' => 'elem',
'_attr' => {}
}, 'SOAP::Data' ),
bless( {
'_attr' => {},
'_value' => [
'thridstring'
],
'_name' => 'string',
'_signature' => [],
'_prefix' => 'elem'
}, 'SOAP::Data' )
]
]
}, 'SOAP::Data' );
没有$data->{array}
查看SOAP :: Data的文档,您应该使用$data->value
来访问您创建的数组。
push @{ $data->value }, $elem1;
print Dumper $data->value;
产量
$VAR1 = [
bless( {
'_attr' => {},
'_prefix' => 'elem',
'_value' => [
'firststring'
],
'_name' => 'string',
'_signature' => []
}, 'SOAP::Data' ),
bless( {
'_signature' => [],
'_name' => 'string',
'_value' => [
'secondstring'
],
'_prefix' => 'elem',
'_attr' => {}
}, 'SOAP::Data' ),
bless( {
'_name' => 'string',
'_signature' => [],
'_value' => [
'thridstring'
],
'_prefix' => 'elem',
'_attr' => {}
}, 'SOAP::Data' ),
bless( {
'_attr' => {},
'_prefix' => 'elem',
'_value' => [
'addedstring'
],
'_name' => 'string',
'_signature' => []
}, 'SOAP::Data' )
];
答案 1 :(得分:0)
感谢Gabs00,
推送$ data->值,$ elem1;工作得非常好