Parse html using PHP and loop through table rows and columns?

前端 未结 3 774
南笙
南笙 2021-01-19 15:31

I\'m trying to parse HTML from loadHTML but I\'m having trouble, I managed to loop through all s in the document but I don\'t know how to loop through

相关标签:
3条回答
  • 2021-01-19 16:09

    Would re-looping work?

    $DOM->loadHTML($url);
    $rows= $DOM->getElementsByTagName('tr');
    $tds= $DOM->getElementsByTagName('td');
    
    for ($i = 0; $i < $rows->length; $i++) {
    // loop through columns
         for ($i = 0; $i < $tds->length; $i++) {
         // loop through rows
    
         }
    

    }

    EDIT You will also have to check the parent node to make sure that the rows parent is the tr you are currently in. Something like

    if ($rows == tds->parent_node){
    // do whatever
    }
    

    May not be syntactically 100% correct, but the concept is sound.

    0 讨论(0)
  • 2021-01-19 16:18

    DOMElement also supports getElementsByTagName:

    $DOM = new DOMDocument();
    $DOM->loadHTMLFile("file path or url");
    $rows = $DOM->getElementsByTagName("tr");
    for ($i = 0; $i < $rows->length; $i++) {
        $cols = $rows->item($i)->getElementsbyTagName("td");
        for ($j = 0; $j < $cols->length; $j++) {
            echo $cols->item($j)->nodeValue, "\t";
            // you can also use DOMElement::textContent
            // echo $cols->item($j)->textContent, "\t";
        }
        echo "\n";
    }
    
    0 讨论(0)
  • 2021-01-19 16:18

    Use DOMXPath to query out the child column nodes with a relative xpath query, like this:

    $xpath = new DOMXPath( $DOM);
    $rows= $xpath->query('//table/tr');
    
    foreach( $rows as $row) {
        $cols = $xpath->query( 'td', $row); // Get the <td> elements that are children of this <tr>
        foreach( $cols as $col) {
            echo $col->textContent;
        }
    }
    

    Edit: To start at specific rows and stop, keep your own index on the row by changing how you're iterating over the DOMNodeList:

    $xpath = new DOMXPath( $DOM);
    $rows= $xpath->query('//table/tr');
    
    for( $i = 3, $max = $rows->length - 2; $i < $max, $i++) {
        $row = $rows->item( $i);
        $cols = $xpath->query( 'td', $row);
        foreach( $cols as $col) {
            echo $col->textContent;
        }
    }
    
    0 讨论(0)
提交回复
热议问题