2009-09-01 8 views
0

J'ai ce codeComment récupérer tous les liens de documents HTML en utilisant DOMXPath

<?PHP 
     $content = '<html> 
     <head> 
     <title></title> 
     </head> 
     <body> 
     <ul> 
      <li style="border:0px" class="list" id="list1111"> 
      <a href="http://www.example.com/" style="font-size:10px" class="mylinks"> 
      <img src="logo.gif" width="235" height="97" alt="logo example" border="0"/> 
      </a> 
      </li> 

      <li style="border:0px" class="list" id="list2222"> 
      <a href="http://www.example.com/2222222" class="mylinks"> 
      second link 
      </a> 
      </li>         
      </ul> 
     </body> 
     </html> '; 

    $doc = new DOMDocument; 
    $doc->loadhtml($content); 
    $xpath = new DOMXPath($doc); 
    $hrefs = $xpath->evaluate("/html/body//a"); 
    for ($i = 0; $i < $hrefs->length; $i++) { 
      $href = $hrefs->item($i); 
      $url = $href->getAttribute('href');     
      echo $url ."<br />"; 
    } 
    ?> 

ce code est très simple, il ne récupérer que les balises d'ancrage à partir d'un document HTML je l'ai trouvé here

ce que je voulez est plus complexe :)

Je veux récupérer tous les tags d'ancrage + tous les enfants et les parents et leurs attributs pour chaque balise d'ancrage

par exemple le résultat que je veux est lors de la récupération de la première balise d'ancrage est quelque chose comme ça

  1-html 
     2-body 
     3-ul 
     4-li(class:list,id:list1111,style:etc....) 
     5-a(href:www.example.com etc..) 
     6-img(width:257 etc) 

Je veux itérer du niveau supérieur au niveau le plus bas pour chaque balise d'ancrage et je veux pouvoir récupérer la attributs pour chaque balise

il est très difficile pour moi à cause de « DOMXPath » :(mais il pourrait être facile pour certains d'entre vous

n'avez des questions que vous?

savez-vous comment résoudre ce problème?

Merci à l'avance

Répondre

1

XPath devraient ainsi vous faire ne pas à itérer. Pour tirer les attributs importants de li utilisent un XPath comme:

//li/@class 

ou

//li/@id 

qui devrait vous donner un objet itérable vous pouvez utiliser.

est ici un peu plus d'informations sur XPaths

+0

merci, je ne cherche pas seulement les propriétés des tags, la chose la plus importante que je cherche est de trouver les parents et les enfants de la balise "anchor". – ahmed

+0

vous pourriez envisager d'utiliser 'parent ::' et 'child ::' axis 'pour faire votre itération. –

0

Peut-être que vous devriez écrire simple feuille de style XSLT. Faites correspondre la balise <a>, puis ancestor :: * donnerait tous les nœuds parents, child :: * vous donnerait tous les enfants - vous auriez beaucoup plus de puissance en utilisant la simple syntaxe XPath via XSLT.

Questions connexes