2013-01-14 106 views
16

標題將其歸納起來。我試圖查詢所有包含類result的div標籤的HTML文件,並且不包含類gridPHP xpath包含類並且不包含類

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

謝謝!

+0

我還沒有嘗試過非常多,僅// div [contains(@class,'result')並且不包含(@class,'grid')]和// div [contains(@class,'result')] [不包含(@class,'grid')]但非常明顯的是,我的語法正好趕上了 – Rob

回答

30

這應做到:

<? 
    $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

這也會匹配class =「* result」的任何內容,即「someResult」。所以你必須給它連接空格。 – crush

+0

感謝評論粉碎,這是非常有益的。至於解決方案,我肯定這會起作用,所以我會在我進入計算機並且已經驗證代碼時給予信用。最後一個問題:作爲一個相對較新的程序員,我應該在哪裏尋求解決方案?我覺得在SO上提出問題很懶,而且Google提供的資源非常混亂。有什麼建議?再次感謝你們的朋友 – Rob

+0

HOLLY CRAP THIS SAVED ME - Cpt Cap-locks –

7

你的XPath將//div[contains(concat(' ', @class, ' '), ' result ') and not(contains(concat(' ', @class, ' '), ' grid '))]

+0

這是迄今爲止此問題的唯一正確答案 –

+0

最佳答案。奇蹟般有效。 – kovpack

3

XPath語法是...

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