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

<fb:like ...>Like ボタンなどの出力で FBML を使用している必要があります。<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 に答える