$domDoc = new DOMDocument();
$domDoc->loadHTML($docSrc);
$xpath = new DOMXPath($domDoc);
$nodeList = $xpath->query("//a[@class='active' and @href='/advanced-2-0.html']");
$this->assertTrue($nodeList->length == 1);
如果$docSrc
是这样的话,这段代码很有用:
$docSrc = '<div><a class="active" href = "/advanced-2-0.html']"></div>';
但是当我将HTML分配给$docSrc
时:
$this->dispatch($_SERVER['REQUEST_URI']);
$html = $this->getResponse()->getBody();
它不起作用。我打印$html
,里面的一切都很好;我无法解释它,因为在这两种情况下它都是一个字符串。
我收到错误:
AccountControllerTest::testIfAllow DOMDocument::loadHTML(): Namespace prefix fb is not defined in Entity, line: 54
我也尝试过:
$domDoc->loadHTML("$this->getResponse()->getBody()");
错误不会出现,但结果为空。
答案 0 :(得分:1)
您必须在输出中使用FBML,例如{Like}按钮<fb:like ...>
。您可以将输出包装在声明命名空间的<html>
元素中。
更新:现在我正在查看代码,我们还必须切换到loadXML()
而不是loadHTML()
并设置libxml的recover
标志:< / p>
$html = '<html xmlns:fb="http://www.facebook.com/2008/fbml">'
. $this->getResponse()->getBody()
. '</html>';
$domDoc = new DOMDocument();
$domDoc->recover = true; // attempt to handle non-well-formed documents
$domDoc->loadXML($html);
...