2013-08-21 24 views
5

Wiem, że możemy użyć PHP DOM do parsowania HTML za pomocą PHP. Znalazłem wiele pytań tutaj na stackoverflow też. Ale mam określony wymóg. Mam zawartość HTML jak poniżejJak analizować HTML w 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> 

Chcę przeanalizować powyższy kod HTML i zapisać conent w dwóch różnych macierzy jak

$heading i $content

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

można to osiągnąć tylko przy użyciu jQuery. Ale nie jestem pewien, czy to właściwa droga. Byłoby wspaniale, gdyby ktoś wskazał mi właściwy kierunek. Z góry dzięki.

+0

używać jQuery jako jego struktura jest prosta. – Notepad

+0

@Susheel: zawartość HTML będzie znacznie większa, ponieważ jest to wynik po parsowaniu plików 'docx'. – laradev

+0

Można użyć wyrażeń regularnych, jeśli nie chcesz używać PHP DOM. –

Odpowiedz

5

spróbować spojrzeć na PHP Simple HTML DOM Parser

Ma świetny składnię podobną do jQuery więc łatwo można wybrać dowolny element, który chcesz przez ID lub klasy

8

Użyłem domDocument i domxpath aby uzyskać rozwiązanie, można go znaleźć pod adresem:

<?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; 
    } 
} 

żywo wynik:http://saji89.codepad.org/2TyOAibZ

+0

Kod został zaktualizowany dla poprawnego wyniku. – saji89

-2

// Tworzy DOM z URL lub plik

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

// Znajdź wszystkie zdjęcia

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

// Znajdź wszystkie linki

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

file_get_html ?? Czy to jest funkcja PHP? – everydayapps

+0

file_get_content ma rację. ma kopię przeszłości ze strony php simple dom –