Problema al tratar de desarmar un xml
![Nota Nota](https://perlenespanol.com/foro/styles/prosilver/imageset/icon_post_target.gif)
¡Buen día!
Les comento mi problema.
A través de un webserver (siendo yo el cliente) obtengo un xml desde un servidor remoto. El archivo que recibo, teóricamente es un xml pero al darle un dump al archivo en si viene de esta manera
El problema es que necesito obtener cada valor individual de cada elemento de la trama, y tengo problemas para esto ya que si se dan cuenta, después de la llave payment_transaction empieza un "[" y luego se abre "{" para empezar una sección de lo que necesito; se cierra nuevamente con "}" y vuelve a abrir otro de igual manera. Y así pueden ser n secciones entre '{}' de este tipo de datos en los cuales las variables tienen la misma etiqueta.
Ya tengo esta parte del código:
pero me da este problema:
¿Me pueden ayudar para ver cómo recorrer las secciones de este xml y poder colocarle una variable a cada dato que necesito? Gracias por la ayuda. Éxitos.
Les comento mi problema.
A través de un webserver (siendo yo el cliente) obtengo un xml desde un servidor remoto. El archivo que recibo, teóricamente es un xml pero al darle un dump al archivo en si viene de esta manera
Using text Syntax Highlighting
$VAR1 = {
'current_page_number' => '1',
'foreign_remote_system' => {
'identifier' => 'xxxxxxxxxxx',
'counter_id' => 'yyyyyyyyyyyy',
'reference_no' => '000000'
},
'last_page_number' => '1',
'xmlns:xrsi' => 'http://servidorremoto.com',
'number_matches' => '9',
'payment_transactions' => {
'payment_transaction' => [
{
'filing_date' => '31/02/99 ',
'receiver' => {
'mobile_details' => {},
'name' => {
'name_type' => 'D',
'last_name' => 'apellido',
'first_name' => 'nombre'
},
'mobile_phone' => {
'phone_number' => {}
},
'address' => {
'country_code' => {
'iso_code' => {}
}
}
},
'fusion' => {
'fusion_status' => 'asdf'
},
'pay_status_description' => 'asdf',
'filing_time' => '23:59:59 ',
'financials' => {
'originators_principal_amount' => 'xxxx'
},
'money_transfer_key' => '1234567890',
'new_mtcn' => '1234561234567890',
'sender' => {
'mobile_details' => {},
'name' => {
'name_type' => 'D',
'last_name' => 'nombre',
'first_name' => 'apellido'
},
'mobile_phone' => {
'phone_number' => {}
},
'address' => {
'country_code' => {
'iso_code' => {}
}
}
},
'payment_details' => {
'originating_country_currency' => {
'iso_code' => {
'currency_code' => 'xxx',
'country_code' => 'xx'
}
}
}
},
{
'filing_date' => '31/02/99 ',
'receiver' => {
'name' => {
'name_type' => 'D',
'last_name' => 'apellido',
'first_name' => 'nombre'
}
},
'fusion' => {
'fusion_status' => 'xxx'
},
'pay_status_description' => 'xxx',
'filing_time' => '23:59:59 ',
'financials' => {
'originators_principal_amount' => 'xxxx'
},
'money_transfer_key' => 'xxxxxxxxxx',
'new_mtcn' => 'yyyyyyyyyyyyyyy',
'sender' => {
'name' => {
'name_type' => 'D',
'last_name' => 'apellido',
'first_name' => 'nombre'
}
},
'payment_details' => {
'originating_country_currency' => {
'iso_code' => {
'currency_code' => 'xxx',
'country_code' => 'xx'
}
}
}
},
{
'filing_date' => '31/12/2099 ',
'receiver' => {
'name' => {
'name_type' => 'D',
'last_name' => 'apellido',
'first_name' => 'nombre'
}
},
'fusion' => {
'fusion_status' => 'xxx'
},
'pay_status_description' => 'xxx',
'filing_time' => '23:59:59',
'financials' => {
'originators_principal_amount' => 'xxx'
},
'money_transfer_key' => 'xxxxxxxxxxx',
'new_mtcn' => 'xxxxxxxxxxxxxxx',
'sender' => {
'name' => {
'name_type' => 'D',
'last_name' => 'apellido',
'first_name' => 'nombre'
}
},
'payment_details' => {
'originating_country_currency' => {
'iso_code' => {
'currency_code' => 'xxx',
'country_code' => 'xx'
}
}
}
}
]
}
};
'current_page_number' => '1',
'foreign_remote_system' => {
'identifier' => 'xxxxxxxxxxx',
'counter_id' => 'yyyyyyyyyyyy',
'reference_no' => '000000'
},
'last_page_number' => '1',
'xmlns:xrsi' => 'http://servidorremoto.com',
'number_matches' => '9',
'payment_transactions' => {
'payment_transaction' => [
{
'filing_date' => '31/02/99 ',
'receiver' => {
'mobile_details' => {},
'name' => {
'name_type' => 'D',
'last_name' => 'apellido',
'first_name' => 'nombre'
},
'mobile_phone' => {
'phone_number' => {}
},
'address' => {
'country_code' => {
'iso_code' => {}
}
}
},
'fusion' => {
'fusion_status' => 'asdf'
},
'pay_status_description' => 'asdf',
'filing_time' => '23:59:59 ',
'financials' => {
'originators_principal_amount' => 'xxxx'
},
'money_transfer_key' => '1234567890',
'new_mtcn' => '1234561234567890',
'sender' => {
'mobile_details' => {},
'name' => {
'name_type' => 'D',
'last_name' => 'nombre',
'first_name' => 'apellido'
},
'mobile_phone' => {
'phone_number' => {}
},
'address' => {
'country_code' => {
'iso_code' => {}
}
}
},
'payment_details' => {
'originating_country_currency' => {
'iso_code' => {
'currency_code' => 'xxx',
'country_code' => 'xx'
}
}
}
},
{
'filing_date' => '31/02/99 ',
'receiver' => {
'name' => {
'name_type' => 'D',
'last_name' => 'apellido',
'first_name' => 'nombre'
}
},
'fusion' => {
'fusion_status' => 'xxx'
},
'pay_status_description' => 'xxx',
'filing_time' => '23:59:59 ',
'financials' => {
'originators_principal_amount' => 'xxxx'
},
'money_transfer_key' => 'xxxxxxxxxx',
'new_mtcn' => 'yyyyyyyyyyyyyyy',
'sender' => {
'name' => {
'name_type' => 'D',
'last_name' => 'apellido',
'first_name' => 'nombre'
}
},
'payment_details' => {
'originating_country_currency' => {
'iso_code' => {
'currency_code' => 'xxx',
'country_code' => 'xx'
}
}
}
},
{
'filing_date' => '31/12/2099 ',
'receiver' => {
'name' => {
'name_type' => 'D',
'last_name' => 'apellido',
'first_name' => 'nombre'
}
},
'fusion' => {
'fusion_status' => 'xxx'
},
'pay_status_description' => 'xxx',
'filing_time' => '23:59:59',
'financials' => {
'originators_principal_amount' => 'xxx'
},
'money_transfer_key' => 'xxxxxxxxxxx',
'new_mtcn' => 'xxxxxxxxxxxxxxx',
'sender' => {
'name' => {
'name_type' => 'D',
'last_name' => 'apellido',
'first_name' => 'nombre'
}
},
'payment_details' => {
'originating_country_currency' => {
'iso_code' => {
'currency_code' => 'xxx',
'country_code' => 'xx'
}
}
}
}
]
}
};
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
El problema es que necesito obtener cada valor individual de cada elemento de la trama, y tengo problemas para esto ya que si se dan cuenta, después de la llave payment_transaction empieza un "[" y luego se abre "{" para empezar una sección de lo que necesito; se cierra nuevamente con "}" y vuelve a abrir otro de igual manera. Y así pueden ser n secciones entre '{}' de este tipo de datos en los cuales las variables tienen la misma etiqueta.
Ya tengo esta parte del código:
Using perl Syntax Highlighting
- foreach my $Key( keys %$dataxml) {
- my $valor= $dataxml->{$Key};
- switch($Key){
- case /current_page_number/ {
- $current_page_number=$valor;
- print "\ncurrent_page_number=".$current_page_number."\n";
- }
- case /foreign_remote_system/ {
- foreach my $Key2(keys %$valor) {
- my $valor2= $valor->{$Key2};
- if ($Key2 eq 'identifier'){
- print "identifier=".$valor2."\n";
- }
- if ($Key2 eq 'counter_id'){
- print "counter_id=".$valor2."\n";
- }
- if ($Key2 eq 'reference_no'){
- print "reference_no=".$valor2."\n";
- }
- }
- }
- case /last_page_number/ {
- $last_page_number=$valor;
- print "last_page_number=".$last_page_number."\n";
- }
- case /number_matches/ {
- $number_matches=$valor;
- print "number_matches=".$number_matches."\n";
- }
- case /payment_transactions/{
- print "-----------------------------------payment_transactions----------------------------\n";
- foreach my $Key2( keys %$valor) {
- my $valor2= $valor->{$Key2};
- print "-----------------------------------". $Key2 . "------------------------\n\n\n";
- #print " Valor2: " . $valor2. "\n";
- foreach my $Key3(keys %$valor2) {
- my $valor3= $valor2->[$Key3];
- print "$Key3 \n";
- }
- }
- }
- }
- }
- }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
pero me da este problema:
Using text Syntax Highlighting
current_page_number=1
identifier=xxxxxxxxxxx
counter_id=xxxxxxxxxxx
reference_no=xxxxxx
last_page_number=1
number_matches=9
-----------------------------------payment_transactions----------------------------
-----------------------------------payment_transaction------------------------
Pseudo-hashes are deprecated at sergio.pl line 137.
Argument "\x{66}\x{69}..." isn't numeric in array element at sergio.pl line 138.
filing_date
Argument "\x{72}\x{65}..." isn't numeric in array element at sergio.pl line 138.
receiver
Argument "\x{66}\x{75}..." isn't numeric in array element at sergio.pl line 138.
fusion
Argument "\x{70}\x{61}..." isn't numeric in array element at sergio.pl line 138.
pay_status_description
Argument "\x{66}\x{69}..." isn't numeric in array element at sergio.pl line 138.
filing_time
Argument "\x{66}\x{69}..." isn't numeric in array element at sergio.pl line 138.
financials
Argument "\x{6d}\x{6f}..." isn't numeric in array element at sergio.pl line 138.
money_transfer_key
Argument "\x{6e}\x{65}..." isn't numeric in array element at sergio.pl line 138.
new_mtcn
Argument "\x{73}\x{65}..." isn't numeric in array element at sergio.pl line 138.
sender
Argument "\x{70}\x{61}..." isn't numeric in array element at sergio.pl line 138.
payment_details
identifier=xxxxxxxxxxx
counter_id=xxxxxxxxxxx
reference_no=xxxxxx
last_page_number=1
number_matches=9
-----------------------------------payment_transactions----------------------------
-----------------------------------payment_transaction------------------------
Pseudo-hashes are deprecated at sergio.pl line 137.
Argument "\x{66}\x{69}..." isn't numeric in array element at sergio.pl line 138.
filing_date
Argument "\x{72}\x{65}..." isn't numeric in array element at sergio.pl line 138.
receiver
Argument "\x{66}\x{75}..." isn't numeric in array element at sergio.pl line 138.
fusion
Argument "\x{70}\x{61}..." isn't numeric in array element at sergio.pl line 138.
pay_status_description
Argument "\x{66}\x{69}..." isn't numeric in array element at sergio.pl line 138.
filing_time
Argument "\x{66}\x{69}..." isn't numeric in array element at sergio.pl line 138.
financials
Argument "\x{6d}\x{6f}..." isn't numeric in array element at sergio.pl line 138.
money_transfer_key
Argument "\x{6e}\x{65}..." isn't numeric in array element at sergio.pl line 138.
new_mtcn
Argument "\x{73}\x{65}..." isn't numeric in array element at sergio.pl line 138.
sender
Argument "\x{70}\x{61}..." isn't numeric in array element at sergio.pl line 138.
payment_details
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
¿Me pueden ayudar para ver cómo recorrer las secciones de este xml y poder colocarle una variable a cada dato que necesito? Gracias por la ayuda. Éxitos.