我试图用PHP解析一个像这样的HTML结构简单的HTML DOM解析器(实际的代码稍微混乱一些,包含链接和图片之间的内容,但这些似乎并不成为一个问题):使用PHP“遍历”未嵌套的div简单的HTML DOM解析器
<div class="members">
<div class="membergroup">Admin</div>
<div class="membername">Member 1</div>
<div class="membername">Member 2</div>
<div class="membername">Member 3</div>
<div class="membergroup">Moderator</div>
<div class="membername">Member 4</div>
<div class="membername">Member 5</div>
<div class="membergroup">Member</div>
<div class="membername">Member 6</div>
<div class="membername">Member 7</div>
</div>
我无法找到一些合理的方式列出特定组中的所有成员(我不能肯定有多少成员有各组)。某种循环可能是合适的,但我无法弄清楚如何打印第三组的第一个成员(本例中为成员6)。
有一个手动的,但我一直无法找到一个解决方案:http://simplehtmldom.sourceforge.net/manual.htm
方式的div是结构化的,没有一个成员实际上是嵌套在“membergroup”的div内,而是直接下他们。
这是我到目前为止有:
<?php
require_once 'scripts/lib/simple_html_dom.php';
$html = file_get_html('test_reference.html'); // The example shown above
// We know the total amount of members.
// However, we don't know who and how many belong to a particular group in advance.
$membercount = 7;
$e = $html->find('div.members', 0)->find('div.membergroup', 0);
if ($e->plaintext === "Admin") {
echo "We are inside the 'Admin' div now!<br />";
echo "Member is called: ";
// ... But we have to go back to the parent,
// because 'membername' isn't inside 'membergroup' :-(
echo $e->parent()->find('div.membername', 0)->plaintext;
echo "<br /><br />";
}
// Same thing, but to the third group ('Member') now instead of 'Admin'
$e = $html->find('div.members', 0)->find('div.membergroup', 2);
if ($e->plaintext === "Member") {
echo "We are inside the 'Member' div now!<br />";
echo "Member is called: ";
// Wrong! We want the first (0th) member of the 'Member' group.
echo $e->parent()->find('div.membername', 0)->plaintext;
echo "<br /><br />";
}
?>
输出将是:
我们都在里面 '管理',现在格设置! 会员被称为:会员1
我们现在在'会员'div里面! 成员称为:会员1 //这是不对的,应该是6