2016-07-08 2 views
0

구문 분석에 필요한 많은 HTML 문서가 있습니다. 여기에 내가 나 자신에게 설명 할 수 있도록 데이터의 예 I 클래스 mailer와 두 번째 div 요소에 따라 네 개의 span 요소를 잡을 필요가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> 

조금 더 나은. 다음 코드는 내가 한 줄에 표시됩니다 @Baddressspan 모든 텍스트의 내용을 인쇄 할 때이

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

모든이에 할당되는 것처럼 내가 지금까지

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

을 가지고 있지만입니다 단일 배열 요소. 각각 span을 개별 배열 요소에 할당하여 개별적으로 파싱 할 수 있기를 바랍니다.

답변

0

나는이 위에 슬레이브 한 시간 후에 어쩔 수없이 하나의 필수 요소를 놓쳤다. 이 코드는 단순히 한 같은

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

으로 할 필요가 $ 루트 레벨> findvalue 1 개 변수에 모든 할당 된. 어리석은 실수

+0

난 여전히 불필요하게 복잡한 XPath 표현을 가지고 있고 코드가 실질적으로 향상 될 수 있다고 생각한다. – Borodin

+2

당신은 정교 할 수 있습니까? –