2013-10-14 6 views
0

html 문서를 구문 분석하고 싶습니다. 'h2'뒤에 모든 'p'의 내용이 필요합니다. HTML DOMDocument 단락 다음 태그에서 문자열 가져 오기

HTML

는 구문 분석 : (예) 여기에 내가 (동적) 마지막 두 개의 'P'태그 싶어

<h1>Lorem ipsum</h1> 
<p> 
    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, 
</p> 

<h2>Aenean commodo</h2> 
<p> 
    Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. 
</p> 

<h2>consectetuer adipiscing</h2> 
<p> 
    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, 
</p> 

. 여기


내 PHP 코드 :

$dom = new DOMDocument(); 
$dom->loadHTMLFile($html_file); 
libxml_use_internal_errors(true); 

$h2_tags = $dom->getElementsByTagName('h2'); 

foreach($h2_tags as $single_tag) { 

    echo $single_tag->textContent;   
    print_r($single_tag); 

} 

이는 나에게 H2의 텍스트 내용을 제공합니다. 하지만 h2 이후에 'p'가 필요합니다. 이것이 가능합니까 아니면 다른 클래스를 사용해야합니까?

답변

2

다음과 같은 코드를 시도 할 수 있습니다 :

$dom = new DOMDocument(); 
$dom->loadHTMLFile($html_file); 
libxml_use_internal_errors(true); 

$xpath = new DomXPath($dom); 
$nodeList = $xpath->evaluate('//p[preceding::h2]/text()'); 

foreach ($nodeList as $domElement){ 
    echo $domElement->textContent."<br><br>"; 
} 

참조 출력 : http://phpfiddle.org/main/code/7i5-3ir

0
<?php 

$items = array(); 

$document = new DOMDocument; 
@$document->loadHTMLFile('example.html'); 

foreach ($document->getElementsByTagName('h2') as $node) { 
    while ($node = $node->nextSibling) { 
     if ($node->nodeType == XML_ELEMENT_NODE) { 
      if ($node->nodeName == 'p') { 
       $items[] = $node->textContent; 
      } 

      break; 
     } 
    } 
} 

print_r($items); 
관련 문제