使用DOMDocument类一次循环两个DOMNodeLists

时间:2014-05-22 08:08:38

标签: php xml dom xpath domdocument

我说错误

  

类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;

如何解决错误?

1 个答案:

答案 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;