我正在尝试从我的另一个站点获取 div。我试过这个,但它不起作用:
<?php
$page = file_get_contents('http://lemans.net.pl/wroclaw');
$doc = new DOMDocument();
$doc->loadHTML($page);
$div = $doc->getElementByID('part');
echo $div->nodeValue;
?>
我正在尝试从我的另一个站点获取 div。我试过这个,但它不起作用:
<?php
$page = file_get_contents('http://lemans.net.pl/wroclaw');
$doc = new DOMDocument();
$doc->loadHTML($page);
$div = $doc->getElementByID('part');
echo $div->nodeValue;
?>
我对 DOMDocument 很好奇,所以我做了一些实验。我编写了以下演示程序来说明一些可能对您有所帮助的关键概念:
<?php
$page = file_get_contents('http://lemans.net.pl/wroclaw');
$doc = new DOMDocument();
$doc->loadHTML($page);
$doc->validateOnParse = true;
$div = $doc->getElementById('part');
echo "<br>------------------------------------------------------------<br>";
echo $tag = $div->hasChildNodes()?" hasChildNodes":" hasNoChildNodes";
echo "<br>------------------------------------------------------------<br>";
echo $div->tagName;
echo "<br>------------------------------------------------------------<br>";
$elements = $div->getElementsByTagName('*');
echo $elements->length;
echo "<br>------------------------------------------------------------<br>";
foreach ($elements as $node) {
echo $node->tagName . " - href: " . $node->getAttribute('href') . "<br>";
}
echo "<br>------------------------------------------------------------<br>";
echo htmlspecialchars($doc->saveHTML($div));
echo "<br>------------------------------------------------------------<br>";
echo $doc->saveHTML($div);
echo "<br>------------------------------------------------------------<br>";
?>
您可以在以下位置尝试 PHP Fiddle: http: //phpfiddle.org/main/code/8hf-nrk(单击运行按钮...)
一些解释和注释
(1) 当您加载文档时,您可能会看到一个警告列表,其中一些与未正确编码的特殊字符或使解析器混淆的嵌套标签有关。
(2) 该validateOnParse
选项似乎没有什么区别,但我把它放在以防万一。
(3) 一旦您从文档中获取节点,存储在 中$div
,您现在就有了一个可以使用的 DOM 片段。你可以做一些事情,比如得到tagName
,看看它hasChildNodes
等等。顺便说一句,nodeValue
是 NULL 或空,因为 div 中没有内容,只有子元素。
(4) 可以使用getElementsByTagName
获取所有子节点的列表。请参阅foreach
列出标记名称和属性之一的循环。
(5) 如果您试图回显div
及其子内容,请使用saveHTML
. 您可以通过传递原始代码来查看原始代码,htmlspecialchars
也可以将 div 直接插入文档流并显示活动链接和徽标图像。
我认为这应该对您有所帮助。祝你好运!