1

我有这个明显的基本代码:

$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 不起作用。


好的,我正在做一些研究。显然,这个问题与命名空间有关......

4

2 回答 2

2

将第 2 行更改为:

$domDoc->loadHTML($docSrc);
于 2011-05-13T19:39:29.097 回答
0

有一个错误,解决方法是:

    $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);
于 2011-05-13T20:49:27.507 回答