我正在尝试使用PHP Simple HTML DOM Parser来解析这样的HTML结构(实际代码稍微有点杂乱并且包含其间的链接和图像,但这些似乎不是问题):
<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>
我很难找到一个合理的方法来列出特定组中的所有成员(我不能确定每个组中有多少成员)。某种循环可能是合适的,但我无法弄清楚如何打印说第3组的第1个成员(本例中的成员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 />";
}
?>
输出将是:
我们现在在'Admin'div里面! 会员被称为:会员1
我们现在在'会员'div里面! 会员被叫:会员1 //这是错的,应该是6
答案 0 :(得分:0)
如果找到了正在查找的membergroup
,请在循环中使用以下代码行,直到它返回另一个membergroup
或到达最后一个元素:
$e = $e->next_sibling();
PHP Simple HTML DOM Parser - API Reference
元素
$e->next_sibling()
返回element的下一个兄弟,如果没有找到则返回null。