phpunit与Zend_Dom_查询

phpunit与Zend_Dom_查询,phpunit,zend-dom-query,Phpunit,Zend Dom Query,如果$docSrc如下所示,则此代码非常有效: $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
如下所示,则此代码非常有效:

$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 = '<div><a class="active" href = "/advanced-2-0.html']"></div>';
它不起作用。我打印
$html
,里面一切正常;我无法解释,因为这两种情况下都是字符串

我得到一个错误:

AccountControllerTest::testIfAllow
DOMDocument::loadHTML():未在实体的第54行定义命名空间前缀fb

我还尝试:

$this->dispatch($_SERVER['REQUEST_URI']);
$html = $this->getResponse()->getBody();

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

您必须在输出中使用FBML,例如,
用于Like按钮。您可以将输出包装在声明名称空间的
元素中

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

$domDoc->loadHTML("$this->getResponse()->getBody()");
$html=''
. $此->getResponse()->getBody()
. '';
$domDoc=新的DOMDocument();
$domDoc->recover=true;//尝试处理格式不正确的文档
$domDoc->loadXML($html);
...

谢谢David的回复,但是您的修复没有帮助,问题是@SergiuGolban啊,我们不得不使用
loadXML()
而不是
loadHTML()
。看我的更新。谢谢大卫,直到我找到原因为止;所有html都应该是有效的,因为我使用严格的Doctype;如果它不是有效的,你不能在里面使用facebook标签;我只是用正则表达式删除它;但对我来说最好的解决方案是硒,它更容易
$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);
...