2016-06-06 2 views
0

Я пытаюсь объединить номера телефонов клуба из этого html.Неверный запрос xpath

Вот мой HTML:

<div id="content"> 
    <div class="container"> 
    <div class="padded"> 
     <ul class="state-list"> 
     <ul class="state-city-list"> 
      <li class="jumper"> 
     <div class="clubinfo"> 
      <div class="clubaddress">123 West Palm Blvd</div> 
      <div class="clubphone">5555551123</div> 
     </div> 
      </li> 
     </ul>      
     <ul class="state-city-list"> 
      <li class="jumper"> 
     <div class="clubinfo"> 
      <div class="clubaddress">456 West Palm Blvd</div> 
      <div class="clubphone">5555555456</div> 
     </div> 
      </li> 
     </ul> 
     <ul class="state-city-list"> 
      <li class="jumper"> 
     <div class="clubinfo"> 
      <div class="clubaddress">789 West Palm Blvd</div> 
      <div class="clubphone">5555555789</div> 
     </div> 
      </li> 
     </ul> 
     <ul class="state-city-list"> 
      <li class="jumper"> 
     <div class="clubinfo"> 
      <div class="clubaddress">213 West Palm Blvd</div> 
      <div class="clubphone">5555555213</div> 
     </div> 
      </li> 
     </ul> 
     </ul> 
    </div> 
    </div> 
</div> 

Вот мой PHP код:

$htmlfile='phonecontents'; 
    $xml=new DOMDocument(); 
    $xml->preserveWhiteSpace=false; 
    $xml->loadHTMLFile($htmlfile); 
    $xpath = new DOMXpath($xml); 
    //$elm = $xpath->query('/div[@id="content"]/div[@class="container"]/div[@class="padded"]/ul[@class="state-list"]/li[@class="jumper"]/div[@class="clubinfo"]/div[@class="clubphone"]'); 
    $elm = $xpath->query('/div[@id="content"]/div[@class="clubinfo"]/div[@class="clubphone"]'); 
    if(!is_null($elm)){ 
     var_dump($elm); 
     foreach($elm as $el){ 
     echo $el->nodeValue."\n"; 
     } 
    } else { 
     echo "NO DATA FOUND \n"; 
    } 

Я не совсем уверен, потому что я новичок в XPath, но я не могу получить мои данные правильно. Если вы посмотрите на php-код, вы можете увидеть, что я попробовал с двумя разными запросами, и ни один из них не работал.

+1

'// div [@ class =" clubphone "]' должен работать. Вам нужно, чтобы вы '//' в начале, чтобы получить все html и проверить его с помощью xpath –

ответ

0

Попробуйте следующее:

$elm = $xpath->query('//div[@id="content"]//div[@class="clubinfo"]/div[@class="clubphone"]'); 

Использование одного слэш означает «прямой ребенок», используя две косые черты означает «любой потомок».

Смежные вопросы