2010-10-01 8 views
5

Ésta es mi HTML:etiquetas H3 y H4 debajo de ella

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

Estoy tratando de construir una matriz de las etiquetas h3, h4 con las etiquetas anidadas dentro de ellos. Un ejemplo de la matriz se vería así:

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

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

    [test 3] => Array 
     (
     ) 

) 

feliz de usar preg_match o DOMDocument, alguna idea?

Respuesta

6

Con DOMDocument:

  • uso de XPath "//h3" permite encontrar todos <h3>. Estas serán las entradas de primer nivel en la matriz
  • para cada uno de ellos:
    • contar una variable $i (contar de 1!) Como parte del bucle
    • uso de XPath "./following::h4[count(preceding::h3) = $i]" para encontrar cualquier sub-ordenada <h4>
    • estos será de segundo nivel en que gama

la expresión XPath es "seleccionar todo <h4> que tienen un mismo c número actual de <h3> anterior ". Para el primer <h3> que cuenta es 1, naturalmente, para el segundo, el recuento es 2, y así sucesivamente.

Asegúrese de ejecutar la expresión XPath en el contexto de los respectivos nodos <h3>.

Cuestiones relacionadas