Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php xPath可以';找不到指定的元素_Php_Xpath - Fatal编程技术网

Php xPath可以';找不到指定的元素

Php xPath可以';找不到指定的元素,php,xpath,Php,Xpath,为了说明我的问题,我将其简化为以下内容: <?php $html = " <!doctype html> <html> <head> <title>Test Title</title> </head> <body> <p>

为了说明我的问题,我将其简化为以下内容:

<?php
    $html = "
        <!doctype html>
        <html>
            <head>
                <title>Test Title</title>
            </head>
            <body>
                <p>Test Body</p>
            </body>
        </html>
    ";

    $dom = new DOMDocument($html);
    $xPath = new DOMXPath($dom);

    $result = $xPath->query("//html/head/title");
    var_dump($result);

    $title = $result->item(0);
    var_dump($title);
?>

这是一个如此简单的示例,我要么严重误解了某些内容,要么我需要某种预配置(但我在示例中没有看到这是必要的)。

正如@TechNyquist所指出的,您不会以这种方式构建DOMDocument

尝试:

$dom = new DOMDocument();
$dom->loadHTML($html);
我试过了

$dom = new DOMDocument();
$dom->loadHTML($html);
$xPath = new DOMXPath($dom);

$result = $xPath->query("//html/head/title");
// var_dump($result);

$title = $result->item(0);
var_dump($title->textContent);
果然如期而至

string(10) "Test Title"

正如@TechNyquist所指出的,您不会以这种方式构建DOMDocument

尝试:

$dom = new DOMDocument();
$dom->loadHTML($html);
我试过了

$dom = new DOMDocument();
$dom->loadHTML($html);
$xPath = new DOMXPath($dom);

$result = $xPath->query("//html/head/title");
// var_dump($result);

$title = $result->item(0);
var_dump($title->textContent);
果然如期而至

string(10) "Test Title"

为什么不直接使用
explode()
?确保dom解析正确,例如,仅尝试搜索
//html
,查看是否拾取该节点,或者执行类似于
echo$dom->saveHTML()的操作
然后再看出来什么。@MarcB
/html
也没有正确解析。@OliverQueen这是一个过于简化的示例。然后执行$dom->saveHTML(),看看会弹出什么。为什么不直接使用
explode()
?确保dom解析正确,例如,尝试只搜索
/html
,然后查看是否拾取了该节点,或者执行类似于
echo$dom->saveHTML()
的操作,然后查看结果。@MarcB
//html
也没有正确解析。@OliverQueen这是一个过于简化的示例。然后执行$dom->saveHTML(),看看会弹出什么。谢谢。我的印象是Dom文档构造函数是
loadHTML
的快捷方式。我休息的时候会试试的,谢谢。你说得对。通过
loadHTML
而不是构造函数来加载html。请参考,不,它没有:
public DOMDocument::u构造([string$version[,string$encoding]])
,谢谢。我的印象是Dom文档构造函数是
loadHTML
的快捷方式。我休息的时候会试试的,谢谢。你说得对。通过
loadHTML
而不是构造函数来加载html。为了便于参考,没有:
public DOMDocument::u构造([string$version[,string$encoding]])