2013-07-14 2 views
0

Je récupère différentes pages Web en utilisant PHP, puis je les charge dans un document DomDocument, mais je n'arrive pas à extraire le texte à partir des noeuds feuilles.Extraction de texte à partir de noeuds feuilles à l'aide de DomDocument en PHP

Par exemple, supposons que je donne les résultats suivants:

<html> 
    <body> 
     <div class="this_is_our_div_of_interest"> 
      <div> 
       <div> 
        <p>Some text</p> 
        <div>Some <a href='#'>more</a> text</div> 
        <p>And <span><strong>another</strong></span> paragraph</p> 
       </div> 
       <p>Yay<p> 
      </div> 
      <div> 
       <h4>abcd</ph4> 
       xyz 
      <div> 
     </div> 
     <div class="we_do_not_want_those_divs"> 
      <p>This text is not important to us</p> 
     </div> 
    </body> 
</html> 

Comme vous pouvez le voir, ceci est une entrée en désordre, mais l'attendu "echo'ed" est sortie:

Some text 
Some more text 
And another paragraph 
Yay 
abcd 
xyz 

Remarque ce qui suit dans la sortie

  1. Je ne récupère qu'une sortie d'une balise spécifique (dans notre exmaple, this_is_our_div_of_interest)
  2. Le est pas un format spécifique pour l'arbre fourni ci-dessus bevcause il vient d'une page Web Tjat Je ne peux pas contrôler son contenu, cependant, je n'aime que d'apporter du contenu des étiquettes telles que div et p qui semblent être des noeuds de feuilles
  3. Il y a quelques balises qui doivent être ommited, comme un, durée et fortes (d'autres peut-être ajouté à la liste)

MISE à JOUR J'utilise XPath pour se rendre à la classe, par exemple, la ligne de code suivante apportera tous les decendents en tant que nœuds separete:

$nodes = $xpath->query("//div[@class='this_is_our_div_of_interest']/descendant::*"); 

Répondre

0

Vous pouvez faire quelque chose comme:

$dom = new DOMDocument(); $dom->loadHTMLFile('file.html'); 
$id = $dom->getElementById('youNeedAnIdForThis'); 

accès maintenant le $id.

Malheureusement, il n'y a pas getElementsByClassName, mais j'en ai trouvé un au http://pastebin.com/4qYMEGqV. Ensuite, votre code ressemblerait à ceci:

$dom = new DOMDocument(); $dom->loadHTMLFile('file.html'); 
$class = getElementsByClassName($dom, 'this_is_our_div_of_interest'); 

$class[0] doit maintenant tenir ce que vous cherchez

Alors peut-être vous devriez strip_tags(), si vous voulez juste le texte.

Peut-être regarder dans DOMNode http://www.php.net/manual/en/class.domnode.php#domnode.props.childnodes?

+0

Eh bien, merci pour votre réponse, je sais comment récupérer par classe, je vais mettre à jour la question. La question principale est comment traverser seulement les nœuds feuilles, quelle variable xpath dois-je utiliser! – Greeso

Questions connexes