php简单的html dom问题

时间:2011-06-28 13:40:17

标签: php simple-html-dom

以下是一些代码,如何获取div[class=title]和最近的<p>内容?我只知道如何在foreach中获取div[class=title],但不知道如何获取p。感谢。

<?php
header("Content-type: text/html; charset=utf-8");
require_once("simple_html_dom.php");
?>
<?php
$str = <<<ETO
<div id="content">
<div class="title"><p>text1</p></div>
<p>destriction1</p>
<p>destriction2</p>
<div class="title"><p>text2</p></div>
<p>destriction3</p>
<p>destriction4</p>
<p>destriction5</p>
<div class="title"><p>text3</p></div>
<p>destriction6</p>
<p>destriction7</p>
</div>
ETO;
$html = str_get_html($str);
foreach($html->find("div[class=title]") as $content){
    echo $content.'<hr />';
}
?>

我希望输出如下:

text1
destriction1
destriction2
------------------------------
text2
destriction3
destriction4
destriction5
------------------------------
text3
destriction6
destriction7
------------------------------

1 个答案:

答案 0 :(得分:3)

您是否尝试过像div[class=title] p这样的选择器?

$html = str_get_html($str);
foreach($html->find("div[class=title] p") as $content){
    echo $content.'<hr />';
}

children()函数也应该工作(如下所示)

即使不是以下段落,也会在每个标题div中获得<p>。为此,请使用next_sibling() function。像这样:

$html = str_get_html($str);
foreach($html->find("div[class=title]") as $content){
    // $content = <div class="title">.  first_child() should be the <p>
    echo $content->first_child().'<hr />';

    // Get the <p>'s following the <div class="title">
    $next = $content->next_sibling();
    while ($next->tag == 'p') {
        echo $next.'<hr />';
        $next = $next->next_sibling();
    }
}