使用 PHP 的 DOM 获取 div 的内容

发布于 2024-11-16 16:27:24 字数 231 浏览 0 评论 0原文

我浏览了有关该主题的其他 Stackoverflow 问题,但那里提供的解决方案似乎都不适合我。

我有一个 html 页面(用 file_get_contents() 抓取),并且该 html 是一个 id 为“main”的 div - 我需要使用 PHP 的 DOMDocument 或类似的东西获取该 div 的内容。对于这种情况,我无法使用 SimpleHTMLDom 解析器,这使事情变得有点复杂。

I've looked through the other Stackoverflow questions on this topic and none of the solutions provided there seem to work for me.

I have an html page (scraped with file_get_contents()) and in that html is a div with an id of "main" - I need to get the contents of that div with PHP's DOMDocument, or something similiar. For this situation I can't use the SimpleHTMLDom parser, which complicates things a bit.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

迷鸟归林 2024-11-23 16:27:24

DOMDocument + XPath 变体:

$xml = new DOMDocument();
$xml->loadHtml($temp);
$xpath = new DOMXPath($xml);

$html = '';
foreach ($xpath->query('//div[@id="main"]/*') as $node)
{
    $html .= $xml->saveXML($node);
}

如果您正在寻找 innerHTML() (PHP DOMDocument参考问题) - 而不是本答案中的 innerXML() - 给出了与 xpath 相关的变体 在此答案中

这里强调了所采用的变化:

$html = '';
foreach ($xpath->query('//div[@id="main"]/node()') as $node)
                                          ######
{
    $html .= $xml->saveHTML($node);
                       ####
}

DOMDocument + XPath variation:

$xml = new DOMDocument();
$xml->loadHtml($temp);
$xpath = new DOMXPath($xml);

$html = '';
foreach ($xpath->query('//div[@id="main"]/*') as $node)
{
    $html .= $xml->saveXML($node);
}

If you're looking for innerHTML() (PHP DOMDocument Reference Question) - instead of innerXML() as in this answer - the xpath related variant is given in this answer.

Here the adoption with the changes underlined:

$html = '';
foreach ($xpath->query('//div[@id="main"]/node()') as $node)
                                          ######
{
    $html .= $xml->saveHTML($node);
                       ####
}
不语却知心 2024-11-23 16:27:24

使用 DOMDocument...

$dom = new DOMDocument;

$dom->loadHTML($html);

$main = $dom->getElementById('main');

要获取序列化的 HTML...

html = '';
foreach($main->childNodes as $node) {
    $html .= $dom->saveXML($node, LIBXML_NOEMPTYTAG);
}

使用 < a href="http://php.net/manual/en/domdocument.savehtml.php" rel="nofollow">saveHTML() 如果您的 PHP 版本支持的话。

Using DOMDocument...

$dom = new DOMDocument;

$dom->loadHTML($html);

$main = $dom->getElementById('main');

To get the serialised HTML...

html = '';
foreach($main->childNodes as $node) {
    $html .= $dom->saveXML($node, LIBXML_NOEMPTYTAG);
}

Use saveHTML() if your PHP version supports it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文