[SP-pm] XML::Simple

Daniel de Oliveira Mantovani daniel.oliveira.mantovani at gmail.com
Fri Dec 4 09:27:46 PST 2009


my $xml = XML::Simple->new();
$itens = $xml->XMLin($content);

foreach my $want (@{ $itens->{'userTransactions'} }) {
    print $want->{'startTime'} . "\n";
    ....
}

Eu não testei o código.

2009/12/4 Marcio Mello <marcio em modapoint.com.br>:
> Daniel,
> Já olhei manuais e exemplos e ainda parece grego prá mim..
> Aqui está o XML... veja se tem alguma sugestão.. obrigado.
> O que preciso é startTime, ANI, DestinationNumber, transactionDescription,
> Time a Cost para montar um relatório em uma tabela.
>
> $VAR1 = {
>         'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
>         'soap:Body' => {
>                        'getUserTransactionsResponse' => {
>                                                         'xmlns' => 'vscws',
>
> 'getUserTransactionsResult' => {
>
>            'VSC' => {
>
>                     'xmlns' => '',
>
>                     'userTransactions' => [
>
>                                           {
>
>                                             'Time' => '1:00',
>
>                                             'Limit' => '5',
>
>                                             'DNIS' => '56012',
>
>                                             'destinationDescription' =>
> "Brasil - S\x{e3}o Paulo - \x{c1}rea 11 - Celular",
>
>                                             'Income' => '0.0000',
>
>                                             'controlNumber' => '2414568',
>
>                                             'ANI' => '1145822125',
>
>                                             'DestinationNumber' =>
> '551199117099',
>
>                                             'Balance' => '-44.024',
>
>                                             'startTime' => '2009-11-27
> 17:28:45',
>
>                                             'Cost' => '0.89',
>
>                                             'transactionDescription' =>
> 'Termination',
>
>                                             'billing' => 'Limited',
>
>                                             'RealTime' => '0:22'
>
>                                           },
>
>                                           {
>
>                                             'Time' => '1:00',
>
>                                             'Limit' => '5',
>
>                                             'DNIS' => '56012',
>
>                                             'destinationDescription' =>
> 'Brasil - Roc',
>
>                                             'Income' => '0.0000',
>
>                                             'controlNumber' => '2414568',
>
>                                             'ANI' => '1145822125',
>
>                                             'DestinationNumber' =>
> '551145215888',
>
>                                             'Balance' => '-44.314',
>
>                                             'startTime' => '2009-11-27
> 17:25:45',
>
>                                             'Cost' => '0.29',
>
>                                             'transactionDescription' =>
> 'Termination',
>
>                                             'billing' => 'Limited',
>
>                                             'RealTime' => '0:19'
>
>                                           },
>
>                                            .............  etc ....
>
> Marcio Mello.
>
> ----- Original Message ----- From: "Daniel de Oliveira Mantovani"
> <daniel.oliveira.mantovani em gmail.com>
> To: <saopaulo-pm em mail.pm.org>
> Sent: Friday, December 04, 2009 2:38 PM
> Subject: Re: [SP-pm] XML::Simple
>
>
> Só para esclarecer, você tem de retorno um XML, você precisa de
> algumas informações desse XML mas não consegue pois está com dúvida de
> como usar o XML::Simple, certo ?
>
> Se for esse o seu problema, o manual explica direitinho. Olha só um trecho
> dele:
> <manual>
>      For example, this XML:
>
>          <opt>
>            <user login="grep" fullname="Gary R Epstein" />
>            <user login="stty" fullname="Simon T Tyson" />
>          </opt>
>
>      would, by default, parse to this:
>
>          {
>            'user' => [
>                        {
>                          'login' => 'grep',
>                          'fullname' => 'Gary R Epstein'
>                        },
>                        {
>                          'login' => 'stty',
>                          'fullname' => 'Simon T Tyson'
>                        }
>                      ]
>          }
> </manual>
>
>
> http://search.cpan.org/~grantm/XML-Simple-2.18/lib/XML/Simple.pm
>
> Mesmo assim se você não conseguir fazer o parser, cola o XML aqui que
> nós te ajudamos.
>
> []'s
>
> 2009/12/4 Marcio Mello <marcio em modapoint.com.br>:
>>
>> A resposta contém:
>> startTime, ANI, DestinationNumber, destinationDescription, Time e Cost
>> .
>> Existem outros dados mas não são importantes.
>>
>> São várias linhas com estes dados e preciso mostrar em uma tabela, que no
>> código tentei colocar em $tabelaprint .
>>
>> Marcio Mello.
>>
>> ----- Original Message ----- From: "Daniel de Oliveira Mantovani"
>> <daniel.oliveira.mantovani em gmail.com>
>> To: <saopaulo-pm em mail.pm.org>
>> Sent: Friday, December 04, 2009 1:54 PM
>> Subject: Re: [SP-pm] XML::Simple
>>
>>
>> Explica o que você quer fazer, não o que você está tentando fazer com o
>> código.
>>
>> 2009/12/4 Lindolfo "Lorn" Rodrigues <lorn.br em gmail.com>:
>>>
>>> You are doing it wrong.
>>> Não é porque SOAP retorna um XML que você tem que "parsear" a resposta
>>> dele
>>> com o XML::Simple :P
>>> Dê uma olhada no
>>> http://search.cpan.org/~berle/SOAP-Simple-0.00_03/lib/SOAP/Simple.pm se
>>> não
>>> funcionar, vai ter que usar
>>> http://search.cpan.org/~mkutter/SOAP-Lite-0.710.10/lib/SOAP/Lite.pm o
>>> SOAP::Lite tem uma pasta 'example' junto com o fonte que ajuda bastante
>>>
>>> 2009/12/4 Marcio Mello <marcio em modapoint.com.br>
>>>>
>>>> Olá à todos,
>>>> Não conheço bem o módulo XML::Simple e não sei como traduzir os dados
>>>> corretamente.
>>>> Se alguém puder ajudar, fico grato..
>>>>
>>>> A resposta que recebo do servidor está aqui e o código está abaixo:
>>>>
>>>> ===========================================================
>>>> $VAR1 = { 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
>>>> 'soap:Body' => { 'getUserTransactionsResponse' => { 'xmlns' => 'vscws',
>>>> 'getUserTransactionsResult' => { 'VSC' => { 'xmlns' => '',
>>>> 'userTransactions' => [ { 'Time' => '1:00', 'Limit' => '5', 'DNIS' =>
>>>> '56012', 'destinationDescription' => "Brasil - S\x{e3}o Paulo -
>>>> \x{c1}rea
>>>> 11
>>>> - Celular", 'Income' => '0.0000', 'controlNumber' => '2414568', 'ANI' =>
>>>> '1145822125', 'DestinationNumber' => '551199117099', 'Balance' =>
>>>> '-44.024',
>>>> 'startTime' => '2009-11-27 17:28:45', 'Cost' => '0.89',
>>>> 'transactionDescription' => 'Termination', 'billing' => 'Limited',
>>>> 'RealTime' => '0:22' }, { 'Time' => '1:00', 'Limit' => '5', 'DNIS' =>
>>>> '56012', 'destinationDescription' => 'Brasil - Roc', 'Income' =>
>>>> '0.0000',
>>>> 'controlNumber' => '2414568', 'ANI' => '1145822125', 'DestinationNumber'
>>>> =>
>>>> '551145215888', 'Balance' => '-44.314', 'startTime' => '2009-11-27
>>>> 17:25:45', 'Cost' => '0.29', 'transactionDescription' => 'Termination',
>>>> 'billing' => 'Limited', 'RealTime' => '0:19' }, { 'Time' => '1:00',
>>>> 'Limit'
>>>> => '5', 'DNIS' => '56012', 'destinationDescription' => 'Brasil - Roc',
>>>> 'Income' => '0.0000', 'controlNumber' => '2414568', 'ANI' =>
>>>> '1145822125',
>>>> 'DestinationNumber' => '551145215888', 'Balance' => '-44.604',
>>>> 'startTime'
>>>> => '2009-11-27 17:16:30', 'Cost' => '0.29', 'transactionDescription' =>
>>>> 'Termination', 'billing' => 'Limited', 'RealTime' => '0:24' }, { 'Time'
>>>> =>
>>>> '1:00', 'Limit' => '5', 'DNIS' => '56012', 'destinationDescription' =>
>>>> 'Brasil -', 'Income' => '0.0000', 'controlNumber' => '2414568', 'ANI' =>
>>>> '1145822125', 'DestinationNumber' => '551164545504', 'Balance' =>
>>>> '-45.494',
>>>> 'startTime' => '2009-11-27 17:06:44', 'Cost' => '0.89',
>>>> 'transactionDescription' => 'Termination', 'billing' => 'Limited',
>>>> 'RealTime' => '0:12' }, { 'Time' => '1:48', 'Limit' => '5', 'DNIS' =>
>>>> '56012', 'destinationDescription' => 'Brasil - Roc', 'Income' =>
>>>> '0.0000',
>>>> 'controlNumber' => '2414568', 'ANI' => '1130337016', 'DestinationNumber'
>>>> =>
>>>> '551130337005', 'Balance' => '-46.016', 'startTime' => '2009-11-27
>>>> 12:19:22', 'Cost' => '0.522', 'transactionDescription' => 'Termination',
>>>> 'billing' => 'Limited', 'RealTime' => '1:43' }, { 'Time' => '1:00',
>>>> 'Limit'
>>>> => '5', 'DNIS' => '56012', 'destinationDescription' => "Brasil -
>>>> S\x{e3}o
>>>> Paulo - \x{c1}rea 11 - Celular", 'Income' => '0.0000', 'controlNumber'
>>>> =>
>>>> '2414568', 'ANI' => '1130337016', 'DestinationNumber' => '551199117099',
>>>> 'Balance' => '-46.906', 'startTime' => '2009-11-27 12:20:28', 'Cost' =>
>>>> '0.89', 'transactionDescription' => 'Termination', 'billing' =>
>>>> 'Limited',
>>>> 'RealTime' => '0:13' }, { 'Time' => '1:00', 'Limit' => '5', 'DNIS' =>
>>>> '56012', 'destinationDescription' => "Brasil - S\x{e3}o Paulo -
>>>> \x{c1}rea
>>>> 11
>>>> - Celular", 'Income' => '0.0000', 'controlNumber' => '2414568', 'ANI' =>
>>>> '1130337016', 'DestinationNumber' => '551199117099', 'Balance' =>
>>>> '-47.796',
>>>> 'startTime' => '2009-11-27 12:07:35', 'Cost' => '0.89',
>>>> 'transactionDescription' => 'Termination', 'billing' => 'Limited',
>>>> 'RealTime' => '0:20' }, { 'Time' => '1:00', 'Limit' => '5', 'DNIS' =>
>>>> '56012', 'destinationDescription' => 'Brasil - Roc', 'Income' =>
>>>> '0.0000',
>>>> 'controlNumber' => '2414568', 'ANI' => '1130337016', 'DestinationNumber'
>>>> =>
>>>> '551130337005', 'Balance' => '-48.086', 'startTime' => '2009-11-27
>>>> 12:06:08', 'Cost' => '0.29', 'transactionDescription' => 'Termination',
>>>> 'billing' => 'Limited', 'RealTime' => '0:21' }, { 'Time' => '0:00',
>>>> 'Limit'
>>>> => '5', 'DNIS' => {}, 'destinationDescription' => {}, 'Income' => '50',
>>>> 'controlNumber' => '2414568', 'ANI' => {}, 'DestinationNumber' => {},
>>>> 'Balance' => '1.914', 'startTime' => '2009-11-26 18:05:36', 'Cost' =>
>>>> '0.0000', 'transactionDescription' => 'Payment', 'billing' => 'Limited',
>>>> 'RealTime' => '0:00' }, { 'Time' => '1:00', 'Limit' => '5', 'DNIS' =>
>>>> '30338031', 'destinationDescription' => 'Brasil - Roc', 'Income' =>
>>>> '0.0000', 'controlNumber' => '2414568', 'ANI' => '1145822125',
>>>> 'DestinationNumber' => '551145215888', 'Balance' => '1.624', 'startTime'
>>>> =>
>>>> '2009-11-25 18:11:25', 'Cost' => '0.29', 'transactionDescription' =>
>>>> 'Termination', 'billing' => 'Limited', 'RealTime' => '0:47' }, { 'Time'
>>>> =>
>>>> '1:00', 'Limit' => '5', 'DNIS' => '56012', 'destinationDescription' =>
>>>> 'Brasil - Roc', 'Income' => '0.0000', 'controlNumber' => '2414568',
>>>> 'ANI'
>>>> =>
>>>> '1145822125', 'DestinationNumber' => '551155478001', 'Balance' =>
>>>> '1.334',
>>>> 'startTime' => '2009-11-25 11:55:47', 'Cost' => '0.29',
>>>> 'transactionDescription' => 'Termination', 'billing' => 'Limited',
>>>> 'RealTime' => '0:09' }, { 'Time' => '1:00', 'Limit' => '5', 'DNIS' =>
>>>> '56012', 'destinationDescription' => 'Brasil - Roc', 'Income' =>
>>>> '0.0000',
>>>> 'controlNumber' => '2414568', 'ANI' => '1145822125', 'DestinationNumber'
>>>> =>
>>>> '551140040435', 'Balance' => '1.044', 'startTime' => '2009-11-25
>>>> 11:48:00',
>>>> 'Cost' => '0.29', 'transactionDescription' => 'Termination', 'billing'
>>>> =>
>>>> 'Limited', 'RealTime' => '0:07' }, { 'Time' => '1:36', 'Limit' => '5',
>>>> 'DNIS' => '56012', 'destinationDescription' => 'Brasil - Roc', 'Income'
>>>> =>
>>>> '0.0000', 'controlNumber' => '2414568', 'ANI' => '1145822125',
>>>> 'DestinationNumber' => '551140040435', 'Balance' => '0.58', 'startTime'
>>>> =>
>>>> '2009-11-25 11:09:02', 'Cost' => '0.464', 'transactionDescription' =>
>>>> 'Termination', 'billing' => 'Limited', 'RealTime' => '1:31' }, { 'Time'
>>>> =>
>>>> '1:00', 'Limit' => '5', 'DNIS' => '56012', 'destinationDescription' =>
>>>> 'Brasil - Roc', 'Income' => '0.0000', 'controlNumber' => '2414568',
>>>> 'ANI'
>>>> =>
>>>> '1145822125', 'DestinationNumber' => '551138330767', 'Balance' =>
>>>> '0.29',
>>>> 'startTime' => '2009-11-25 10:11:35', 'Cost' => '0.29',
>>>> 'transactionDescription' => 'Termination', 'billing' => 'Limited',
>>>> 'RealTime' => '0:47' }, { 'Time' => '1:00', 'Limit' => '5', 'DNIS' =>
>>>> '56012', 'destinationDescription' => 'Brasil - Roc', 'Income' =>
>>>> '0.0000',
>>>> 'controlNumber' => '2414568', 'ANI' => '1145822125', 'DestinationNumber'
>>>> =>
>>>> '551138330767', 'Balance' => '0.0000', 'startTime' => '2009-11-25
>>>> 09:50:25',
>>>> 'Cost' => '0.29', 'transactionDescription' => 'Termination', 'billing'
>>>> =>
>>>> 'Limited', 'RealTime' => '0:52' } ], 'Val' => { 'UserID' => '2414568' },
>>>> 'STATUS' => '0' } } } }, 'xmlns:xsd' =>
>>>> 'http://www.w3.org/2001/XMLSchema',
>>>> 'xmlns:soap' => 'http://schemas.xmlsoap.org/soap/envelope/' };
>>>> =====================================================================
>>>>
>>>> use LWP::UserAgent;
>>>> use HTTP::Request;
>>>> use XML::Simple;
>>>> use Data::Dumper;
>>>>
>>>> my $message = '<?xml version="1.0" encoding="utf-8"?>
>>>> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>> xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>>>> xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
>>>> <soap:Header>
>>>> <AuthHeader xmlns="vscws">
>>>> <distriID>XXXX</distriID>
>>>> <password>XXXXXX</password>
>>>> </AuthHeader>
>>>> </soap:Header>
>>>> <soap:Body>
>>>> <getUserTransactions xmlns="vscws">
>>>> <controlNumber>XXXXXX</controlNumber>
>>>> <transactionType></transactionType>
>>>> <dateFrom>2009-11-10</dateFrom>
>>>> <dateTo>2009-11-30</dateTo>
>>>> </getUserTransactions>
>>>> </soap:Body>
>>>> </soap:Envelope>';
>>>>
>>>> my $length = length($message);
>>>>
>>>> my $userAgent = LWP::UserAgent->new();
>>>> my $request = HTTP::Request->new(POST =>
>>>> 'http://200.XXX.XXX.XX:90/ws.asmx');
>>>> $request->header(SOAPAction => '"vscws/getUserTransactions"');
>>>> $request->content_type("text/xml; charset=utf-8");
>>>> $request->content_length($length);
>>>> $request->content($message);
>>>>
>>>> my $response = $userAgent->request($request);
>>>>
>>>> #
>>>> # Parseando o resultado (XML) do servidor
>>>> #
>>>> my $ref = XMLin( $response->content ) or die $!;
>>>> my $xml = XMLout( my $hashref );
>>>>
>>>> for ( my $i = $#{ $ref->{getUserTransactions} }; $i > 0; $i-- ) {
>>>>
>>>> $startdate = "${ $ref->{getUserTransactions} }[$i]->{startTime}";
>>>> $origem = "${ $ref->{getUserTransactions} }[$i]->{ANI}";
>>>> $destino = "${ $ref->{getUserTransactions}
>>>> }[$i]->{DestinationNumber}";
>>>> $descrip = "${ $ref->{getUserTransactions}
>>>> }[$i]->{destinationDescription}";
>>>> $duration = "${ $ref->{getUserTransactions} }[$i]->{Time}";
>>>> $cost = "${ $ref->{getUserTransactions} }[$i]->{Cost}";
>>>>
>>>> $tabelaprint .= "
>>>> <tr>
>>>> <td><p align=\"center\"><font face=\"Arial\"
>>>> size=\"1\"><b>$startdate</b></font></td>
>>>> <td><p align=\"center\"><font face=\"Arial\"
>>>> size=\"1\">$origem</font></td>
>>>> <td><p align=\"center\"><font face=\"Arial\"
>>>> size=\"1\"><b>$destino</b></font></td>
>>>> <td><p align=\"center\"><font face=\"Arial\"
>>>> size=\"1\"><b>$descrip</b></font></td>
>>>> <td><p align=\"center\"><font face=\"Arial\"
>>>> size=\"1\">$duration</font></td>
>>>> <td><p align=\"center\"><font face=\"Arial\"
>>>> size=\"1\">$cost</font></td>
>>>> </tr>
>>>> ";
>>>> }
>>>>
>>>> if($response->code == 200) {
>>>> print "$tabelaprint";
>>>> }
>>>> else {
>>>> print $response->error_as_HTML;
>>>> };
>>>> Obrigado.
>>>> Marcio Mello.
>>>> marcio em modapoint.com.br
>>>> _______________________________________________
>>>> SaoPaulo-pm mailing list
>>>> SaoPaulo-pm em pm.org
>>>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>>
>>>
>>>
>>> --
>>> lorn at lornlab dot org
>>> Lindolfo "Lorn" Rodrigues
>>>
>>>
>>> _______________________________________________
>>> SaoPaulo-pm mailing list
>>> SaoPaulo-pm em pm.org
>>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>>
>>
>>
>>
>> --
>> Existe dois tipos de pessoas, as que reclamam a vida inteira do que
>> fazem, e as que fazem o que nasceram para fazer.
>> _______________________________________________
>> SaoPaulo-pm mailing list
>> SaoPaulo-pm em pm.org
>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>
>> _______________________________________________
>> SaoPaulo-pm mailing list
>> SaoPaulo-pm em pm.org
>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>
>
>
>
> --
> Existe dois tipos de pessoas, as que reclamam a vida inteira do que
> fazem, e as que fazem o que nasceram para fazer.
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>



-- 
Existe dois tipos de pessoas, as que reclamam a vida inteira do que
fazem, e as que fazem o que nasceram para fazer.


More information about the SaoPaulo-pm mailing list