0
$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()");

不出现错误,但结果为空。

4

1 回答 1

1

您必须在输出中使用 FBML,例如<fb:like ...>,对于 Like 按钮。您可以将输出包装在<html>声明命名空间的元素中。

更新:现在我正在查看我们的代码,我们还必须切换到loadXML()而不是loadHTML()设置 libxml 的recover标志:

$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);
...
于 2011-11-11T23:13:38.533 回答