さて、私はここで私が理解できない奇妙なケースがあります。
ウェブサイトのリストを解析したい。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
致命的なエラー:44行目のexample.phpで未定義のメソッドDOMText :: getAttribute()を呼び出す
ここで得られないのは、getAttribute
メソッドを呼び出すとforeachループのコンテキストがどのように変わるかです。したがって、ここに2つの質問があります。
- メソッドを呼び出すと、foreachループが台無しになりますか?第二に、最もエレガントな回避策は何ですか?
$item->attributes with
さらに別のforeachメソッドをループして、属性名を比較しdata-text
、一致する場合は値を読み取ることができることに気付きましたが、それを行うためのより良い方法が必要ですか?!