DOMDOCUMENT - 没有正确获取内容

DOMDOCUMENT - not getting content correctly

我正在努力从下面的简化来源 HTML:

中找到下面这些 <td> 的各个单元格内容
<table id='tableid'>
    <thead>
        <tr>
            <th>Column 1</th>
            <th>Column 2</th>
            <th>Column 3</th>
            <th>Column 4</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td><a href='/link?variable=15'>Text1</a></td>
            <td class='color-4'>Text2</td>
            <td>Text3</td>
            <td>Text4</td>
        </tr>
        <tr>
            <td><a href='/link?variable=27'>Text5</a></td>
            <td class='color-1'>Text6</td>
            <td>Text7</td>
            <td>Text8</td>
        </tr>
        [...] // Shortened for brevity
    </tbody>
</table>

缩短代码:

libxml_use_internal_errors(true);
$doc = new DOMDocument();
$doc->loadHTML($this->DOM);
$table = $doc->getElementById('tableid');
print_r($table);
foreach ($table->childNodes as $table_node) {
    if (!empty($table_node->tagName) && $table_node->tagName == 'tbody') {    
        if (!empty($table_node->childNodes)) {
            foreach ($table_node->childNodes as $table_row) {
                print_r($table_row->childNodes);
            }
        }
    }
}

我从上述 table 级别的代码中得到以下(简化的)反馈:

DOMElement Object
(
    [tagName] => table
    [schemaTypeInfo] =>
    [nodeName] => table
    [nodeValue] =>
        Text1Text2Text3Text4
        Text5Text6Text7Text8
    [nodeType] => 1
    [parentNode] => (object value omitted)
    [childNodes] => (object value omitted)
);

并且在行级别:

DOMNodeList Object
(
    [length] => 0
)

唯一与 HTML 不同的是 <a> 标签中的单引号和 table 的 id,但是,我对此表示怀疑造成了麻烦,因为它找到了 tableid 就好了。

此时,我没有看到 table 行的子节点,table 的节点值是从其子节点中剥离标签的文本。我希望能够遍历到 <tr>s 和 <td>s

有什么想法吗?

由于您处理的是 html 文档,使用 xpath 可能更简单:

$xpath = new DOMXpath($doc);
$exp = "//table/tbody//tr";
$targets = $xpath->evaluate($exp);
for ($i = 0; $i < $targets->length; $i++) {
    echo $targets->item($i) ->nodeValue. "\n";
}

或使用foreach:

foreach ($targets as $target) {
            $entries = $xpath->evaluate('.//td',$target);
            foreach ($entries as $entry){
                echo $entry->nodeValue . "\n";
             }
            echo "\n";
    }

输出:

Text1
            Text2
            Text3
            Text4
        
Text5
            Text6
            Text7
            Text8