将元素追加到已存在的 SOAP::Data 复杂类型
Append an element to an already existing SOAP::Data complex type
我对 SOAP、PERL 以及我被要求做的几乎所有其他事情都很陌生,所以我希望有人能给我指出正确的方向。
我实现了一个简单的 WCF 解决方案,并且编写了一个 PERL 客户端,它使用 SOAP::lite 和 SOAP::Data 将 "complex data structure" 传递给解决方案。到目前为止,所有这些都运行良好,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 信封。
非常感谢任何帮助...
看看 $data 正在使用什么 Data::Dumper,你明白了
$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' )
];
感谢 Gabs00,
push $data->value, $elem1;干得漂亮
我对 SOAP、PERL 以及我被要求做的几乎所有其他事情都很陌生,所以我希望有人能给我指出正确的方向。
我实现了一个简单的 WCF 解决方案,并且编写了一个 PERL 客户端,它使用 SOAP::lite 和 SOAP::Data 将 "complex data structure" 传递给解决方案。到目前为止,所有这些都运行良好,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 信封。
非常感谢任何帮助...
看看 $data 正在使用什么 Data::Dumper,你明白了
$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' )
];
感谢 Gabs00,
push $data->value, $elem1;干得漂亮