2014-12-02 2 views
2

에서 특정 클래스 결국 P 태그를 얻는 방법 :나는 HTML이 어떻게 DOM

<p class="story-body__introduction">2013 yazındaki Gezi Parkı eylemlerinin başlarından itibaren çeşitli medya kurumları, gösterilerin arkasında Sırp gençlik örgütü Otpor'un olduğunu iddia etti.</p> 
<p>Geçtiğimiz günlerde ise, "Emniyet Genel Müdürlüğü Kaçakçılık ve Organize Suçlarla Mücadele Daire Başkanlığı'nın Gezi Parkı eylemlerinin devam ettiği 15 Haziran 2013'te İstanbul Organize Suçlarla Şube Müdürlüğü'ne gönderdiği yazıda eylemlerle ilgili Otpor'u işaret ettiği" bildirildi.</p> 
<p>Radikal.com.tr'de yer alan habere göre, "Bu yazı üzerine dönemin İstanbul Organize Suçlarla Şube Müdürü Nazmi Ardıç, İstanbul Cumhuriyet Başsavcılığı'na yazdığı yazıda ve Savcı Muammer Akkaş da İstanbul 1 No'lu Hakimliği'ne başvurarak çeşitli bilgiler istedi."</p> 
<p>Yazıda "Türkiye'de Otpor/Canvas örgütü tarafından bir halk hareketi geliştirilmeye çalışıldığı ve Otpor lideri İvan Maroviç'in birçok kişiyi bu yönde eğittiği" bildiriliyor.</p> 
<p>Maroviç'in bu kapsamda oyuncu Memet Ali Alabora'nın da aralarında bulunduğu isimlerle görüştüğü iddia ediliyor.</p> 
<p>Otpor, Sırbistan'da 1998 - 2004 yılları arasında faaliyet gösteren, dönemin lideri Slobodan Miloseviç'in devrilmesine neden olan sokak hareketlerinin önemli bileşenlerinden bir gençlik hareketi.</p> 

내 목표는 다음과 같습니다

: 내가 처음 class= "story-body__introduction"

코드 후 모든 페이지 태그를 얻으려면을

$storyBodyIntroduction = $html->find('p[class=story-body__introduction]', 0)->innertext(); 

다른 사람들을 어떻게 얻을 수 있습니까? <p>?

+0

예, 가능합니다. 코드/시도도 게시해야합니다. – Ghost

+0

PHP가 아니라 자바 스크립트가 필요합니다. –

+0

그러나 이것은 dom에서 가능합니다. – Nikul

답변

2

예, 그 확실히 가능, 당신이 플래그를 추가 할 수 있습니다, 그것의 발견 후, 얻을 <p> innertexts의 모든 나머지 :

$found = false; 
$text = array(); 
foreach($html->find('p') as $p) { 
    if($p->class == 'story-body__introduction') { 
     $found = true; 
     continue; 
    } 

    if($found) { 
     $text[] = $p->innertext; 
    } 
} 

echo '<pre>'; 
print_r($text); 

(!) 참고 : ->innertext속성/프로퍼티하지 않는 기능입니다 innertext()

보충 정보 :이 대답은 실제로 문서의 모든 단락 요소를 가져옵니다. 단락 시작점의 형제 인 요소 만 필요할 경우 부모가 동일한 수준에 있는지 부모님도 확인할 수 있습니다. 예 :

$found = false; 
$text = array(); 

$start_point = $html->find('p.story-body__introduction', 0); 
foreach($html->find('p') as $p) { 
    if($p->class == 'story-body__introduction') { 
     $found = true; 
     continue; 
    } 

    if($found && ($p->parent() == $start_point->parent())) { 
     $text[] = $p->innertext; 
    } 
} 

echo '<pre>'; 
print_r($text); 

이 답변에는 같은 레벨의 형제 (시작점부터) 만 표시됩니다.

+1

나는 왜 그것들을 * 간단한 * html dom이라고 부르는 지 궁금하다. –

+0

@ Ja͢ck 그래 _simple_은 꽤 벗어난 것이다. 당신의 대답과 같은 하나의 xpath 질의만으로 충분할 것입니다. – Ghost

2

DOM extension의 일부이며 대부분의 PHP 배포본과 함께 제공되는 XPath를 사용할 수 있습니다.

$doc = new DOMDocument; 
$doc->loadHTML($html); 
$xpath = new DOMXPath($doc); 

$query = '//p[preceding-sibling::p[@class="story-body__introduction"]]'; 

foreach ($xpath->query($query) as $node) { 
    echo $node->textContent, PHP_EOL; 
} 

원하는 클래스의 형제를 따르는 모든 단락 요소를 선택합니다. 요소에 둘 이상의 클래스가있는 경우 다른 쿼리가 필요합니다.