ZendによるPHPUnitテストにおけるXPath
-
13-11-2019 - |
質問
私はこの明らかに基本的なコードを持っています:
$docSrc =
'<?xml version="1.0" encoding="UTF-8" ?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title /></head>
<body><p>Test paragraph.</p></body>
</html>';
$domDoc = new DOMDocument();
$domDoc->loadXML($docSrc);
$xpath = new DOMXPath($domDoc);
$nodeList = $xpath->query('//p');
$this->assertTrue($nodeList->length == 1);
.
成功するはずですが、誤って失敗すると、長さは0です。
うわーありがとう!できます!残念ながら、私の元のコード:
$query = new Zend_Dom_Query($docSrc);
$xpathQuery = '//p';
$result = $query->queryXpath($xpathQuery);
$this->assertTrue($result->count() == 1);
.
XMLで、LoadXMLを実行していると思います。これが起こる理由は何ですか?
OK私はZendライブラリのどこかでカルプリットを見つけました:
if ('<' . '?xml' == substr(trim($document), 0, 5)) {
return $this->setDocumentXml($document, $encoding);
}
.
XML文書であるため、これが正しい場合は疑問に思いますが、XMLがロードされません。
OK私はいくつかの研究をしています。どうやら、問題は名前空間を使って何か関係があります...
解決
行2を変更する:
$domDoc->loadHTML($docSrc);
. 他のヒント
バグがあり、回避策は次のとおりです。
$docSrc =
'<?xml version="1.0" encoding="UTF-8" ?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title /></head>
<body><p>Test paragraph.</p></body>
</html>';
$domDoc = new DOMDocument();
$domDoc->loadXML($docSrc);
$xpath = new DOMXPath($domDoc);
$xpath->registerNamespace('xhtml', 'http://www.w3.org/1999/xhtml');
$nodeList = $xpath->query('//xhtml:p');
$this->assertTrue($nodeList->length == 1);
. 所属していません StackOverflow