2010-04-11 5 views
0

J'ai une liste de liens non ordonnée, régulière et imbriquée, et je voudrais la recopier avec PHP et la convertir en tableau.Convertir une liste de liens HTML non ordonnée (imbriquée) vers un tableau PHP de liens

La liste originale ressemble à ceci:

<ul> 
<li><a href="http://someurl.com">First item</a> 
    <ul> 
    <li><a href="http://someotherurl.com/">Child of First Item</a></li> 
    <li><a href="http://someotherurl.com/">Second Child of First Item</a></li> 
    </ul> 
</li> 
<li><a href="http://bogusurl.com">Second item</a></li> 
<li><a href="http://bogusurl.com">Third item</a></li> 
<li><a href="http://bogusurl.com">Fourth item</a></li> 
</ul> 

Tous les articles peuvent avoir des enfants.

(Le screen scraping réelle est pas un problème, je peux le faire.)

Je voudrais en faire un tableau PHP, de seulement les liens, tout en gardant la nature hiérarchique de la liste. Des idées?

J'ai regardé en utilisant htmlsimpledom et phpQuery, qui utilisent tous deux la syntaxe de type jQuery. Mais, je n'arrive pas à avoir la syntaxe correcte. Je peux obtenir tous les liens, mais je finis par perdre la nature hiérarchique et l'ordre.

Merci.

Répondre

0

Utilisez DOMDocument et SimpleXMLElement le long des lignes de:

$doc = new DOMDocument(); 
$doc->loadHTML($html); 
$xmlStr = $doc->saveXml($doc->documentElement); 

$xml = new SimpleXmlElement($xmlStr); 

$links = array(); 

foreach ($xml->xpath('//a') as $li) { 
    $links[] = $li->attributes()->href; 
} 

Si href est ajouté aux liens $ comme SimpleXMLElement, utilisez ob_start et ob_clean pour capturer la chaîne.

Cheat sheet for xpath queries (pdf)

+0

Merci, cela devient tous les liens, mais il perd l'imbrication! – Klark

+0

Il y aura un moyen de le faire en utilisant SimpleXmlElement mais je ne peux pas répondre du haut de ma tête. Essayez de jeter un coup d'œil au manuel de PHP pour la classe. – Danten