我说错误
类DOMNodeList的对象无法在线转换为字符串
这是包含错误的行:
$output .= '<li><a target="_blank" href="' . $postURL . '">' .
$title->nodeValue . '</a></li>';
DOM
我的代码:
$postTitle = $xpath->query("//tr/td[@class='row1'][3]//span[1]/text()");
$postURL = $xpath->query("//tr/td[@class='row1'][3]//a/@href");
$output = '<ul>';
foreach ($postTitle as $title) {
$output .= '<li><a target="_blank" href="' . $postURL . '">' . $title->nodeValue . '</a></li>';
}
$output .= '</ul>';
echo $output;
如何解决错误?
答案 0 :(得分:1)
您从DOM中获取两个独立的节点列表,迭代第一个并尝试使用循环内的第二个作为字符串。 DOMNodeList不能转换为字符串(在PHP中),因此您会收到错误。但是,节点列表可以在Xpath中转换为字符串。
您需要迭代展位列表(//tr/td[@class='row1'][3]
)相同的位置路径,并在每个td
元素的循环内获取$ title和$ url。
$posts = $xpath->evaluate("//tr/td[@class='row1'][3]");
$output = '<ul>';
foreach ($posts as $post) {
$title = $xpath->evaluate("string(.//span[1])", $post);
$url = $xpath->evaluate("string(.//a/@href)", $post);
$output .= sprintf(
'<li><a target="_blank" href="%s">%s</a></li>',
htmlspecialchars($url),
htmlspecialchars($title)
);
}
$output .= '</ul>';
echo $output;