使用DOMXPath解析html表数据和href值

时间:2015-04-16 00:24:15

标签: php dom xpath

我有一个包含3列的表,其中每列可以包含一个链接或数据,如下所示:

<tr><td><a href='link1'>value1</a></td><td><a href='link2'>value2</a></td><td><a href='link3'>value3</a></td></tr>
<tr><td><a href='link4'>value4</a></td><td>value5</td><td>value6</td></tr>
<tr><td>value7</td><td><a href='link8'>value8</a></td><td>value9</td></tr>
<tr><td>value10</td><td>value11</td><td><a href='link12'>value12</a></td></tr>
<tr><td>value13</td><td>value14</td><td>value15</td></tr>

我可以使用以下代码获取表格中每个单元格的数据:

$data = file_get_contents('pathtomyfile');
$dom = new domDocument;
@$dom->loadHTML($data);
$dom->preserveWhiteSpace = true;
$xpath = new DOMXPath($dom);
$rows = $xpath->query('//tr');

foreach ($rows as $row) {
        $cols = $row->getElementsByTagName('td');
        foreach ($cols as $col) {
            echo $col->nodeValue;
        }
        echo "\n";
}

我正在尝试以不同的格式输出表格,并且想知道除了链接所在的单元格的表格单元格的值之外,我还能获得href的值。例如,对于第一个表格单元格,我想获得“link1”和“value1”。

1 个答案:

答案 0 :(得分:0)

或者,您可以检查内部循环内部(迭代每个cols的内部循环)内部是否存在链接(因为其中一些链接不存在):

foreach ($rows as $row) {
    $cols = $row->getElementsByTagName('td');
    foreach ($cols as $col) {
        echo 'value = ' . $col->nodeValue;
        if($xpath->evaluate('count(./a)', $col) > 0) { // check if an anchor exists
            echo ' | link = ' . $xpath->evaluate('string(./a/@href)', $col); // if there is, then echo the href value
        }
        echo '<br/>';

    }
    echo "<br/>";
}

Sample Output