我有很大一棵树型数据。结构大致如下。
require ("simple_html_dom.php");
$result=<<<EOT
<ul>
    <h2 id="fta">tree1</h2>
        <li>nod a</li>
        <li>nod b</li>
        <li>nod c</li>
    <h2 id="ftb">tree2</h2>
        <li>nod d</li>
        <li>nod e</li>
        <li>nod f</li>
    <h2 id="ftc">tree3</h2>
        <li>nod g</li>
        <li>nod h</li>
    <h2 id="ftd">tree4</h2>
        <li>nod i</li>
        <li>nod j</li>
        <li>nod k</li>
        <li>nod l</li>
</ul>
EOT;$html = str_get_html($result);foreach($html->find("ul") as $st) {
    if($st->find("h2[id=ftc]")){continue;}
    echo $st;
    if($st->find("h2[id=ftd]")){break;}
}现在我想有条件的分段获取其中的任意一段数据,举个例子,比如下面一段(<h2>+若干的<li>,h2的ID号根据要求指定。):<h2 id="ftc">tree3</h2>
<li>nod g</li>
<li>nod h</li>我的代码不工作,求高手指点。谢谢。

解决方案 »

  1.   

    将树状结构数据输出xml 然后再控制读取 列出 这样是不是比较容易解决问题?
      

  2.   

    $html = str_get_html($result);$flag=false;
    foreach($html->find("ul",0)->children() as $sd){
    if($sd->id=='ftc') $flag=true;
    if($sd->id=='ftd') break;
    if($flag==false) continue;
        echo $sd->outertext,"\n";
    }
      

  3.   

    另外,这种ul下的ul里夹杂着h2的写法是不规范的
      

  4.   

    这样好像更好看点:$html = str_get_html($result);$node=$html->find("ul h2[id=ftc]",0);do{
        if($node->id=='ftd')break;
        echo $node->outertext,"\n";
    }while($node=$node->next_sibling());
      

  5.   

    恩,do while的方法不错,我喜欢,谢谢。