simple html dom 获取某2个id之间的HTML元素

去圣西罗-为尤文喝彩 2011-11-03 07:27:09
我有很大一棵树型数据。结构大致如下。
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>

我的代码不工作,求高手指点。谢谢。
...全文
143 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
helloyou0 2011-11-03
  • 打赏
  • 举报
回复
这样好像更好看点:

$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());
helloyou0 2011-11-03
  • 打赏
  • 举报
回复
另外,这种ul下的ul里夹杂着h2的写法是不规范的
helloyou0 2011-11-03
  • 打赏
  • 举报
回复
$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";
}
黄袍披身 2011-11-03
  • 打赏
  • 举报
回复
将树状结构数据输出xml 然后再控制读取 列出 这样是不是比较容易解决问题?

  • 打赏
  • 举报
回复
恩,do while的方法不错,我喜欢,谢谢。

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧