php DOM getAttribute

Bon, j'ai un étrange cas ici, que je ne peux pas comprendre.

Je veux analyser une liste sur un site web. Le code HTML ressemble un peu à ceci:

<!-- ... -->
<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>
<!-- ... -->

Maintenant je veux récupérer tous les éléments de la liste. J'utilise le DOMDocument-classe. Jusqu'à présent, qui fonctionne très bien:

$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);
}

Mais maintenant, je suis à la recherche d'une méthode simple pour la lecture de la data-text attribut. Ce que j'ai fait:

foreach ($items as $item) {
     echo $item->getAttribute('data-text');
}

Cela fonctionne très bien pour le premier élément, mais ensuite il bloque le foreach de la boucle. La sortie est:

point 1

Fatal error: Call to undefined method DOMText::getAttribute()
dans example.php sur la ligne 44

Ce que je ne comprends pas, ici, est de savoir comment l'appel de la getAttribute méthode modifie le contexte de la boucle foreach. Voici donc deux questions:

  1. Comment l'invocation de la méthode vis ma boucle foreach? Deuxièmement,
    quelle est la plus élégante solution de contournement?
  2. J'ai réalisé que je pouvais faire une boucle par $item->attributes with encore un autre
    foreach méthode, puis de comparer le nom de l'attribut à data-text et
    lire la valeur dans le cas d'une correspondance, mais il y a sûrement d'être un
    meilleure façon de le faire?!

OriginalL'auteur clausvdb | 2013-01-28