How to clear every data value from ul li tag using PHP?

I have a page with these HTML codes:

<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>

I want to clean and remove the train, there is no time for the train and the cost of trains according to the above code.

My code does not clear the information I want, but it gives me a space. I checked a lot of questions posted earlier, but I can't find anything like this.

my code is:

 $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>";
+4
source share
2 answers

You need to first specify this element in the element, first get each li, and then point to the necessary elements:

$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"])', $t),
        );
    }
}

Output example

+1
source
libxml_use_internal_errors(true);
$page = new DOMDocument();
$page->preserveWhiteSpace = false;
$page->loadHTML($html);
$xpath = new DomXPath($page);

foreach($xpath->query("//*[contains(@class, 'train-time')]") as $element){

      print_r($element->nodeValue); 

}

Hope this helps

0
source

All Articles