2013-08-21 17 views
5

So che possiamo usare PHP DOM per analizzare l'HTML usando PHP. Ho trovato molte domande anche qui sullo stackoverflow. Ma ho un requisito specifico. Ho un contenuto HTML come qui di seguitoCome analizzare HTML in PHP?

<p class="Heading1-P"> 
    <span class="Heading1-H">Chapter 1</span> 
</p> 
<p class="Normal-P"> 
    <span class="Normal-H">This is chapter 1</span> 
</p> 
<p class="Heading1-P"> 
    <span class="Heading1-H">Chapter 2</span> 
</p> 
<p class="Normal-P"> 
    <span class="Normal-H">This is chapter 2</span> 
</p> 
<p class="Heading1-P"> 
    <span class="Heading1-H">Chapter 3</span> 
</p> 
<p class="Normal-P"> 
    <span class="Normal-H">This is chapter 3</span> 
</p> 

voglio analizzare quanto sopra HTML e salvare il conent in due serie differenti come

$heading e $content

$heading = array('Chapter 1','Chapter 2','Chapter 3'); 
$content = array('This is chapter 1','This is chapter 2','This is chapter 3'); 

posso realizzare questo semplicemente utilizzando jQuery. Ma non sono sicuro, è nel modo giusto. Sarebbe bello se qualcuno potesse indicarmi la giusta direzione. Grazie in anticipo.

+0

utilizzare jQuery come la sua struttura è semplice. – Notepad

+0

@Susheel: il contenuto HTML sarà molto più grande in quanto è l'output dopo l'analisi dei file 'docx' – laradev

+0

Puoi usare le espressioni regolari se non ti piace andare su PHP DOM. –

risposta

5

provare a guardare PHP Simple HTML DOM Parser

Ha sintassi brillante simile a jQuery in modo da poter facilmente selezionare qualsiasi elemento che si desidera per ID o classe

8

Ho usato DOMDocument e DOMXPath per ottenere la soluzione, si può trovare all'indirizzo:

<?php 
$dom = new DomDocument(); 
$test='<p class="Heading1-P"> 
    <span class="Heading1-H">Chapter 1</span> 
</p> 
<p class="Normal-P"> 
    <span class="Normal-H">This is chapter 1</span> 
</p> 
<p class="Heading1-P"> 
    <span class="Heading1-H">Chapter 2</span> 
</p> 
<p class="Normal-P"> 
    <span class="Normal-H">This is chapter 2</span> 
</p> 
<p class="Heading1-P"> 
    <span class="Heading1-H">Chapter 3</span> 
</p> 
<p class="Normal-P"> 
    <span class="Normal-H">This is chapter 3</span> 
</p>'; 

$dom->loadHTML($test); 
$xpath = new DOMXpath($dom); 
    $heading=parseToArray($xpath,'Heading1-H'); 
    $content=parseToArray($xpath,'Normal-H'); 

var_dump($heading); 
echo "<br/>"; 
var_dump($content); 
echo "<br/>"; 

function parseToArray($xpath,$class) 
{ 
    $xpathquery="//span[@class='".$class."']"; 
    $elements = $xpath->query($xpathquery); 

    if (!is_null($elements)) { 
     $resultarray=array(); 
     foreach ($elements as $element) { 
      $nodes = $element->childNodes; 
      foreach ($nodes as $node) { 
       $resultarray[] = $node->nodeValue; 
      } 
     } 
     return $resultarray; 
    } 
} 

diretta conseguenza:http://saji89.codepad.org/2TyOAibZ

+0

Il codice è stato aggiornato per il risultato corretto. – saji89

-2

// Crea DOM da URL o file

$html = file_get_html('http://www.google.com/'); 

// Trova tutte le immagini

foreach($html->find('img') as $element) 
    echo $element->src . '<br>'; 

// Trova tutti i link

foreach($html->find('a') as $element) 
    echo $element->href . '<br>'; 
+0

file_get_html ?? È una funzione PHP? – everydayapps

+0

file_get_content ha ragione. ha una copia passata dal sito Web di php simple dom –