特定PHP安装上的PHP致命错误 - 调用未定义的方法DOMText :: getElementsByTagName()

时间:2015-10-23 04:12:11

标签: php dom

我遇到代码在一个PHP安装上工作而另一个没有工作的问题。对于错误,也许一次安装更宽容。

当我上传到制作时,我收到以下错误:

 PHP Fatal error:  Call to undefined method DOMText::getElementsByTagName() in ...

导致错误的行是:

$tds = $tr->getElementsByTagName('td');

我觉得这个问题与在getElementsByTagName内调用DOMText::方法而不是DOMDocument::the docs似乎使这一点显而易见)有关,但是我的我不知道自己做错了什么,我不知道如何解决这个问题。

这是我的代码:

<?php

// The HTML
$table_html = '<table>
    <thead>
        <tr>
            <td>AAA</td>
            <td>BBB</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>aaa</td>
            <td>bbb</td>
        </tr>
    </tbody>
</table>';


// Create DOM Document
$document = new DOMDocument();
$document->preserveWhiteSpace = false;
$document->formatOutput = true;
@$document->loadHTML($table_html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD | LIBXML_NOEMPTYTAG);

// Change TD's to TH's in THEAD's
$theads = $document->getElementsByTagName('thead')->item(0);
if ($theads) {

    foreach($theads->childNodes AS $tr) {

        $tds = $tr->getElementsByTagName('td'); // <---- This is where the error occurs
        if ($tds->length > 0) {

            $i = $tds->length - 1;
            while($i > -1) {
                $td = $tds->item($i); // td
                $text = $td->nodeValue; // text node
                $th = $document->createElement('th', $text); // th element with td node value
                $td->parentNode->replaceChild($th, $td); // replace
                $i--;
            }

        }

    }
}

// Output
echo $document->saveHTML(); 

1 个答案:

答案 0 :(得分:2)

问题是,childNodes包括每个标记之间的空白文本节点。

要获取<tr>中的$theads代码,请使用getElementsByTagName,例如

foreach ($theads->getElementsByTagName('tr') as $tr) {
    // ...
}

或者,如果您在第一个<td>中的所有<thead>元素之后,请尝试使用XPath

$xpath = new DOMXPath($document);
$tds = $xpath->query('//thead[1]/tr/td'); // xpath indexes are 1-based