2013-01-14 18 views
16

içeriyor. Başlık özetliyor. result sınıfını içeren tüm div etiketleri için bir HTML dosyası sorgulamaya çalışıyorum ve grid sınıfını içermiyor.PHP xpath sınıf içeriyor ve sınıf

<div class="result grid">skip this div</div> 
<div class="result">grab this one</div> 

Teşekkürler!

+0

Ben denemedim çok, sadece // div [include (@ class, 'result') ve içermez (@ class, 'grid')] ve // ​​div [içerir (@ class, 'result')] [not içermez (@ class, 'grid')] ama benim sözdizimimin şu anda kapalı olduğu çok açıktı – Rob

cevap

30

olacaktır:

<? 
    $doc = new DOMDocument(); 
    $doc->loadHTMLFile('test.html'); 

    $xpath = new DOMXPath($doc); 
    $nodeList = $xpath->query("//div[contains(@class, 'result') and not(contains(@class, 'grid'))]"); 

    foreach ($nodeList as $node) { 
     echo $node->nodeName . "\n"; 
    } 
?> 
+0

Bu, ayrıca class = "* sonuç" i.e. "someResult" ile de eşleşir. Bu yüzden ona yer açmalısın. – crush

+0

yorum için teşekkürler crush, bu son derece yararlıdır. Çözüm gelince, bu işe yarayacaktır, bu yüzden bilgisayar başında olduğumda kredi vereceğim ve kodu doğruladım. son bir soru: nispeten yeni bir programcı olarak, çözümlerim için nereye gitmeliyim? SO hakkında soru sormanın tembel olduğunu ve google'ın karmaşık kaynaklar sağladığını hissediyorum. herhangi bir tavsiye? tekrar teşekkürler çocuklar – Rob

+0

HOLLY CRAP BU SAVED ME - Cpt Cap-kilitler –

7

Kişisel XPath Bu yapmalıyım //div[contains(concat(' ', @class, ' '), ' result ') and not(contains(concat(' ', @class, ' '), ' grid '))]

+0

Bu soruya şu ana kadarki en doğru cevap –

+0

en iyi cevaptır. ÇALIŞIYOR bir cazibe gibi. – kovpack

3

XPATH sözdizimi olacaktır ...

//div[not(contains(@class, 'grid'))]