0

我正在尝试从我的另一个站点获取 div。我试过这个,但它不起作用:

<?php
$page = file_get_contents('http://lemans.net.pl/wroclaw');

$doc = new DOMDocument();
$doc->loadHTML($page);
$div = $doc->getElementByID('part');
     echo $div->nodeValue;
?> 
4

1 回答 1

1

我对 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 直接插入文档流并显示活动链接和徽标图像。

我认为这应该对您有所帮助。祝你好运!

于 2013-03-28T17:28:58.033 回答