XPath in PhpUnit Testing con Zend
-
13-11-2019 - |
Domanda
Ho questo codice apparentemente di base:
$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);
.
Dovrebbe avere successo, ma fallisce miseramente, la lunghezza è 0. Ho cercato una soluzione tutto il giorno, ma non disponibile.
.
wow grazie!Funziona!Sfortunatamente, il mio codice originale:
$query = new Zend_Dom_Query($docSrc);
$xpathQuery = '//p';
$result = $query->queryXpath($xpathQuery);
$this->assertTrue($result->count() == 1);
.
pensa che sia un XML ed esegui loadXML.Hai idea del perché questo accada?
.
OK Ho trovato il colpevole da qualche parte nella libreria Zend:
if ('<' . '?xml' == substr(trim($document), 0, 5)) {
return $this->setDocumentXml($document, $encoding);
}
.
Mi chiedo se questo è corretto poiché è un documento XML, ma caricare XML non funziona.
.
ok sto facendo qualche ricerca.Apparentemente, il problema ha qualcosa a che fare con gli spazi dei nomi ...
Soluzione
Modifica linea 2 a:
$domDoc->loadHTML($docSrc);
. Altri suggerimenti
C'è un bug, Workaround è:
$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);
. Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow