2016-07-08 13 views
0

ich viele HTML-Dokumente, die ich brauche zu analysieren. Hier ist ein Beispiel für die Daten so, dass ich mich ein wenig erklären kann besserParsing HTML mit HTML :: TreeBuilder :: XPath

<div id="filerDiv"> 
    <div class="mailer">Mailing Address 
     <span class="mailerAddress">65 MARKET STREET, SUITE 1207,</span> 
     <span class="mailerAddress">CAMANA BAY, P.O. BOX 31110</span> 
     <span class="mailerAddress">GRAND CAYMAN E9 KY1-1205</span> 
    </div> 
    <div class="mailer">Business Address 
     <span class="mailerAddress">65 MARKET STREET, SUITE 1207,</span> 
     <span class="mailerAddress">CAMANA BAY, P.O. BOX 31110</span> 
     <span class="mailerAddress">GRAND CAYMAN E9 KY1-1205</span> 
     <span class="mailerAddress">345 943 4573</span> 
    </div> 
    <div class="companyInfo"> 
     <span class="companyName">GREENLIGHT CAPITAL RE, LTD. (Filer) 
      <acronym title="Central Index Key">CIK</acronym>: <a href="/cgi-bin/browse-edgar?CIK=0001385613&amp;action=getcompany">0001385613 (see all company filings)</a></span> 
     <p class="identInfo"><acronym title="Internal Revenue Service Number">IRS No.</acronym>: <strong>000000000</strong><br />Type: <strong>10-Q</strong> | Act: <strong>34</strong> | File No.: <a href="/cgi-bin/browse-edgar?filenum=001-33493&amp;action=getcompany"><strong>001-33493</strong></a> | Film No.: <strong>161612131</strong><br /><acronym title="Standard Industrial Code">SIC</acronym>: <b><a href="/cgi-bin/browse-edgar?action=getcompany&amp;SIC=6331&amp;owner=include">6331</a></b> Fire, Marine &amp; Casualty Insurance<br />Assistant Director 1</p> 
    </div> 
</div> 

Ich brauche die vier span Elemente greifen, die das zweite div Element mit der Klasse folgen mailer. Hier ist der Code Ich habe bisher

my $root = HTML::TreeBuilder::XPath->new; 
$root->parse($content); 
my @Baddress = $root->findvalue('//div[@id="filerDiv"]/div[@class="mailer"][2]/span/text()'); 

Aber wenn ich den Inhalt @Baddress auszudrucken alle der span Text wird in einer Zeile angezeigt werden, wie dies

65 MARKET STREET, SUITE 1207,CAMANA BAY, P.O. BOX 31110 GRAND CAYMAN E9 KY1-1205 345 943 4573 

Alles ist ein zugewiesen wird einzelnes Array-Element. Ich möchte jede span seinen eigenen Array-Element zugeordnet werden, so dass sie einzeln analysiert werden können.

Antwort

0

UHG nach Stunden über diese schuftend verpasst I 1 wesentliches Element. Der Code muss als solche

my @Baddress = $root->findvalues('//div[@id="filerDiv"]/div[@class="mailer"][2]/span/text()'); 

ich hatte einfach $ Wurzel-> findvalue sein, die alles auf 1 Variable wurde zuweisen. Dumme Fehler

+0

Ich glaube, Sie haben noch einen unnötig komplexen XPath-Ausdruck und Ihr Code verbessert werden könnte, im Wesentlichen – Borodin

+2

könnten Sie das näher erläutern? –