2010-10-01 1 views
5

Questo è il mio HTML:Trova H3 e H4 tag sotto di esso

<h3>test 1</h3> 
<p>blah</p> 
<h4>subheading 1</h4> 
<p>blah</p> 
<h4>subheading 2</h4> 
<h3>test 2</h3> 
<h4>subheading 3</h4> 
<p>blah</p> 
<h3>test 3</h3> 

Sto cercando di costruire una serie di tag h3, h4 con i tag annidati dentro di loro. Un esempio di matrice sarebbe simile:

Array 
(
    [test1] => Array 
     (
      [0] => subheading 1 
      [1] => subheading 2 
     ) 

    [test 2] => Array 
     (
      [0] => subheading 3 
     ) 

    [test 3] => Array 
     (
     ) 

) 

felice di usare preg_match o DOMDocument, tutte le idee?

risposta

6

Con DOMDocument:

  • utilizzo XPath "//h3" per trovare tutti i <h3>. Queste saranno le voci di primo livello nella propria matrice
  • per ciascuno di essi:
    • conta una variabile $i (contare da 1!), Come parte del ciclo
    • utilizzo XPath "./following::h4[count(preceding::h3) = $i]" per trovare qualsiasi sub-ordinata <h4>
    • questi saranno secondo livello in voi matrice

l'espressione XPath è "selezionare tutti <h4> che hanno un medesimo c numero di onstant precedente <h3>". Per la prima <h3> che conta è 1, naturalmente, per il secondo il conteggio è 2, e così via.

Assicurarsi di eseguire l'espressione XPath nel contesto delle rispettive <h3> nodi.