我遇到代码在一个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();
答案 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