DOMDocument返回空数据

时间:2014-12-11 10:41:29

标签: php html curl domdocument

我尝试从其他网站学习数据报废,所以我开始尝试创建一个小的HTML文件。

domhtml.php:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <body>
        <div id="mango">
            This is the mango div. It has some text and a form too.
            <form>
                <input type="text" name="first_name" value="Yahoo" />
                <input type="text" name="last_name" value="Bingo" />
            </form>

            <table class="inner">
                <tr><td>Happy</td><td>Sky</td></tr>
            </table>
        </div>

        <table id="data" class="outer">
            <tr><td>Happy1</td><td>Sky</td></tr>
            <tr><td>Happy2</td><td>Sky</td></tr>
            <tr><td>Happy3</td><td>Sky</td></tr>
            <tr><td>Happy4</td><td>Sky</td></tr>
            <tr><td>Happy5</td><td>Sky</td></tr>
        </table>
    </body>
</html>

extract.php:

<?php

$ch = curl_init("http://192.168.0.198/projects/domhtml.php");

curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);

$cl = curl_exec($ch);


$dom = new DOMDocument();
$dom->loadHTML($cl);
$dom->validate();
$title = $dom->getElementById("mango");

//var_dump($title);exit;

//$title = $dom->saveXML($title);

echo '<pre>';
print_r($title);


?>

但它返回输出:

DOMElement Object
(
)

为什么它是空的?除此之外该怎么办?我也尝试了PHP Dom not retrieving element解决方案,但它返回相同的内容。

修改:

好的,就像你们所有人都告诉我的那样:

$ch = curl_init("http://192.168.0.198/shopclues/domhtml.php");

curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);

$cl = curl_exec($ch);


$dom = new DOMDocument();
$dom->loadHTML($cl);
$dom->validate();
$title = $dom->getElementById("data");

//var_dump($title);exit;

$title = $dom->saveXML($title);

echo '<pre>';
print_r($title);

现在正在打印:

Happy1  Sky
Happy2  Sky
Happy3  Sky
Happy4  Sky
Happy5  Sky

我想知道有多少tr标签,以便我可以将每个tr的值存储在某个变量中。我的意思是如何循环将值存储到变量中?

提前致谢。

1 个答案:

答案 0 :(得分:0)

DOM类中的默认“__toString()”函数一直在稳步改进:

http://codepad.viper-7.com/hw9UKg

使用不同版本的PHP运行上面代码段中的代码,您将看到5.3.3和5.4.33之间的区别。

对于问题的第二部分,有很多方法可以做你想要的。我会告诉你一个:

$dom = new DOMDocument();
// I used a different URL
$dom->loadHtmlFile("http://192.168.0.198/shopclues/domhtml.php");
$list = $dom->getElementById("data")->childNodes;

print_r($list->length); // outputs 5 for me.

$listDOMNodeList,它实现了Traversable,因此您可以循环它以获取值。有关更多信息,请查看:

http://php.net/manual/en/class.domnodelist.php

对于更复杂的查询,您可能需要查看DOMXPath

http://php.net/manual/en/class.domxpath.php

使用DomDocumentDomNode阅读您可以使用的所有功能也是有益的:

http://php.net/manual/en/class.domdocument.php

http://php.net/manual/en/class.domnode.php