微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用PHP从ul li标签中抓取每个数据值?

我有一个包含 HTML代码页面,如下所示:

<ul class ='trainList'>
<li>
    <div class="smallFont farelist no-discount ">
        <div class="train-no">ABC 701</div>
        <div class="train-time">06:10<br>07:15</div>
        <div class="train-info">
            <div class="Box">
                <div class="total-price">MYR 50.00</div>
                <div class="farediscount">
                    <div class="actual-fare-price">Array</div>
                    <div class="train-discount"></div>
                </div>
            </div>
</li>
<li>
    <div class="smallFont farelist no-discount ">
        <div class="train-no">ABC 701</div>
        <div class="train-time">06:10<br>07:15</div>
        <div class="train-info">
            <div class="Box">
                <div class="total-price">MYR 50.00</div>
                <div class="farediscount">
                    <div class="actual-fare-price">Array</div>
                    <div class="train-discount"></div>
                </div>
            </div>
</li>

我想从上面的代码搜索提取火车号码,训练时间和火车价格.

我的代码没有刮掉我想要的信息,但给了我空白.我查过很多以前发过的问题,但是找不到类似的东西.

我的代码

$train_doc = new DOMDocument();

libxml_use_internal_errors(TRUE); 

if(!empty($html)){ 

  $train_doc->loadHTML($html);

  libxml_clear_errors(); 

  $train_xpath = new DOMXPath($train_doc);


  $train_list = array();

$train = $train_xpath->query('//div[@class="smallFont farelist no-discount"]');
var_dump($train);
if($train->length > 0){   


  foreach($train as $pat){

      $name = $train_xpath->query('div[@class="train-no"]',$pat)->item(0)->nodeValue;

      $train_types = array(); 
      $types = $train_xpath->query('div[@class="train-time"]/a',$pat);


      foreach($types as $type){
          $train_types[] = $type->nodeValue; 


      $train_list[] = array('name' => $name,'types' => $train_types);

  }
}
}

echo "<pre>";
print_r($train_list);
echo "</pre>";

解决方法

首先需要指向元素,首先获取每个li然后指向所需的元素:

$train_list = array();
$train = $train_xpath->query('//li/div[contains(@class,"smallFont farelist no-discount")]');
if($train->length > 0) {
    foreach($train as $t) {
        $time_s =  $train_xpath->evaluate('string(./div[@class="train-time"]/text()[1])',$t);
        $time_e =  $train_xpath->evaluate('string(./div[@class="train-time"]/text()[2])',$t);
        $train_list[] = array(
            'train_no' => $train_xpath->evaluate('string(./div[@class="train-no"])',$t),'train_time' => "$time_s - $time_e",'train_price' => $train_xpath->evaluate('string(./div[@class="train-info"]/div/div[@class="total-price"])',);
    }
}

Sample Output

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐