Вопрос

У меня есть этот по-видимому, базовый код:

$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.У вас есть идеи, почему это происходит?


Хорошо, я нашел виновник где-то в библиотеке Zend:

if ('<' . '?xml' == substr(trim($document), 0, 5)) {
    return $this->setDocumentXml($document, $encoding);
}
.

Интересно, правильно ли это, так как это документ XML, но нагрузка XML не работает.


Хорошо, я делаю некоторые исследования.Видимо, проблема имеет отношение к пространствам имен ...

Это было полезно?

Решение

Изменить строку 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);
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top