DOMDocument在h2中获取链接

时间:2012-11-16 14:03:05

标签: php html domdocument

我正在使用phpDOMDocument

我需要做的是获取href标记内的所有<a> <h2>

在有

列表的页面上
<h2><a href="blablabla">The title</a></h2>

每个<a>

中只有一个<h2>

我设法实现的目标是:

  1. 通过以下方式加载文档:loadfromhtml(此项目需要)
  2. 获取文档中的<h2>
  3. 获取<h2>->nodeValue (caption of url)
  4. 所以我的问题在于,当我尝试在getElementsByTagName('a')节点(#2)上执行相同的<h2>时,php挂起(不再生成输出,页面加载停止)

    我哪里做错了?感谢帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

对我来说很好,例如

<?php
$doc = new DOMDocument;
$doc->loadhtml(data());

foreach( $doc->getElementsByTagName('h2') as $h2 ) {
    foreach( $h2->getElementsByTagName('a') as $a ) {
        echo $a->getAttribute('href'), ': ', $a->nodeValue, "\n";
    }
}

function data() {
    return <<< eoh
<html>
    <head><title>...</title></head>
    <body>
        <h2><a href="link1">header 1</a></h2>
        <p>yadda yadda</p>
        <h2><a href="link2">header 2</a></h2>
        <p>yadda yadda</p>
        <h2><a href="link3">header 3</a></h2>
        <p>yadda yadda</p>
    </body>
</html>
eoh;
}

但我觉得使用XPath更容易 e.g。

<?php
$doc = new DOMDocument;
$doc->loadhtml(data());
$xpath = new DOMXPath($doc);

foreach( $xpath->query('/html/body//h2/a') as $a) {
    echo $a->getAttribute('href'), ": ", $a->nodeValue, "\n";
}

function data() {
    return <<< eoh
<html>
    <head><title>...</title></head>
    <body>
        <h2><a href="link1">header 1</a></h2>
        <p>yadda yadda</p>
        <h2><a href="link2">header 2</a></h2>
        <p>yadda yadda</p>
        <h2><a href="link3">header 3</a></h2>
        <p>yadda yadda</p>
    </body>
</html>
eoh;
}

打印

link1: header 1
link2: header 2
link3: header 3