【发布时间】:2013-01-12 08:58:38
【问题描述】:
好的,所以我这里有一个奇怪的案例,我只是想不通。
我想解析网站上的列表。 HTML 看起来有点像这样:
<!-- ... -->
<ul id="foo">
<li data-text="item 1">Blabla</li>
<li data-text="item 2">Blabla</li>
<li data-text="item 3">Blabla</li>
<li data-text="item 4">Blabla</li>
</ul>
<!-- ... -->
现在我想获取所有列表项。我为此使用 DOMDocument 类。到目前为止,效果很好:
$dom = new DOMDocument();
if (!$dom->loadHTML($html)) {
die ('Could not parse...');
}
$list = $dom->getElementById('foo');
$items = $list->childNodes;
foreach ($items as $item) {
print_r($item);
}
但是现在,我正在寻找一种简单的方法来读出data-text 属性。我所做的是:
foreach ($items as $item) {
echo $item->getAttribute('data-text');
}
这对于第一个项目来说效果很好,但是它会使 foreach 循环崩溃。输出是:
项目 1
致命错误:调用未定义的方法 DOMText::getAttribute() 在第 44 行的 example.php 中
我不明白的是,调用 getAttribute 方法如何改变 foreach 循环的上下文。所以这里有两个问题:
- 如何调用该方法会破坏我的 foreach 循环?其次, 最优雅的解决方法是什么?
- 我意识到我可以再循环一次
$item->attributes withforeach 方法,然后将属性名称与data-text和 在匹配的情况下读取值,但肯定必须有一个 更好的方法?!
【问题讨论】:
标签: php dom html-parsing domdocument getattribute