2016-03-30 6 views
0

LWP kullanıcı aracısını kullanarak isteği gönderiyorum ve yanıtı alıyorum. Yanıtı html biçiminde ve dosyaya eklenmiş bir dosyadan alacağım.dosya, xml cevabında perl olarak nasıl gönderilir?

örn: Ben dosyayı almak gerekir bu yanıt itibaren

 `<html> 
     <head> 
     <title>Download Files</title> 
     <meta http-equiv=\'Content-Type\' content=\'text/html; charset=utf-8\'> 
     <link rel=\'stylesheet\' href=\'http://res.mytoday.com/css/main.css\' type=\'text/css\'> 
     <link rel=\'stylesheet\' href=\'http://res.mytoday.com/css/Menu.css\' type=\'text/css\'> 
     <link rel=\'stylesheet\' href=\'/statsdoc/freeze.css\' type=\'text/css\'> 
     </head> 
     <body> 
     <table border=1> 
     <tr class=\'rightTableData\'> 
     <th>No.</th> 
     <th>File Name</th> 
     <th>File Size</th> 
     </tr><tr class=\'rightTableData\'> 
     <td>1</td><td> 
     <a href=\'/dlr_download?file=/mnt/dell6/SRM_DATA/data/API_FILE  /20160329/LSUZisbZahtHNeImZJm_1-1.csv.zip\'>1-1.csv.zip</a> 
    </td><td>487 bytes</td> </tr> 
    </table> 
    </br></br> 
    <center><a href=\'/dlr_download?file=/mnt/dell6/SRM_DATA/data/API_FILE/20160329/LSUZisbZahtHNeImZJm-csv.zip\'>Download all</a></center>               
    </body></html>` 

. Birisi dosyayı yanıt vermeme yardım edebilir.

cevap

1

Bilgileri ayıklamak için bir ayrıştırıcı kullanın. XML::LibXML kullandım, ancak ayrıştırıcıyı başarısız yapan kapanış br etiketlerini kaldırmam gerekiyordu.

#!/usr/bin/perl 
use warnings; 
use strict; 

my $html = '<html> 
     <head> 
     <title>Download Files</title> 
     <meta http-equiv=\'Content-Type\' content=\'text/html; charset=utf-8\'> 
     <link rel=\'stylesheet\' href=\'http://res.mytoday.com/css/main.css\' type=\'text/css\'> 
     <link rel=\'stylesheet\' href=\'http://res.mytoday.com/css/Menu.css\' type=\'text/css\'> 
     <link rel=\'stylesheet\' href=\'/statsdoc/freeze.css\' type=\'text/css\'> 
     </head> 
     <body> 
     <table border=1> 
     <tr class=\'rightTableData\'> 
     <th>No.</th> 
     <th>File Name</th> 
     <th>File Size</th> 
     </tr><tr class=\'rightTableData\'> 
     <td>1</td><td> 
     <a href=\'/dlr_download?file=/mnt/dell6/SRM_DATA/data/API_FILE  /20160329/LSUZisbZahtHNeImZJm_1-1.csv.zip\'>1-1.csv.zip</a> 
    </td><td>487 bytes</td> </tr> 
    </table> 
    <!-- </br></br> I had to comment this out! --> 
    <center><a href=\'/dlr_download?file=/mnt/dell6/SRM_DATA/data/API_FILE/20160329/LSUZisbZahtHNeImZJm-csv.zip\'>Download all</a></center>               
    </body></html>'; 

use XML::LibXML; 
my $dom = 'XML::LibXML'->load_html(string => $html); 
print $dom->findvalue('/html/body/table/tr[2]/td[2]/a/@href'); 

Ayrıca geçersiz HTML ayrıştırmak için recover bayrak kullanabilirsiniz: yanıtta

my $dom = 'XML::LibXML'->load_html(string => $html, recover => 1); 
+0

Ben dosyayı okuyabilir geldi ya benim pc kaydetmek? – sharon

+0

dosya url'yi bir değişkende sakladığımda, bu hata 'boş XPath /usr/lib/perl5/XML/LibXML.pm satırında 1317'de bulunur. Neden bu hata oluştu. – sharon

+0

@sharon: Bu ilgisiz gibi görünüyor. Yeni bir soru sorun, kodu göster. – choroba