2013-01-14 24 views
16

Tytuł podsumowuje to. Próbuję przesłać zapytanie do pliku HTML o wszystkie znaczniki DIV, które zawierają klasę result i nie zawierają klasy grid.PHP xpath zawiera klasę i nie zawiera klasy

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

Dzięki!

+0

nie próbowałem bardzo dużo, tylko // div [zawiera (@klasa, 'wynik') i nie zawiera (@klasa, 'siatka')] i // div [zawiera (klasa @, wynik ')] [nie zawiera (klasa @, siatka')] ale było bardzo oczywiste, że moja składnia była wyłączona na samym początku – Rob

Odpowiedz

30

To powinno wystarczyć:

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

To również pasuje do wszystkiego z klasą = "* wynikiem", np. "NiektóreRekult". Więc musisz się do tego przydać. – crush

+0

dzięki za zmiażdżenie komentarzy, to jest bardzo pomocne. Jeśli chodzi o rozwiązanie, to jestem pewien, że to zadziała, więc przyznam kredyt, gdy znajdę się na komputerze i zweryfikuję kod. ostatnie pytanie: jako względnie nowy programista, gdzie powinienem szukać rozwiązań? Uważam, że zadawanie pytań na temat SO jest leniwy, a Google zapewnia niechciane zasoby. jakakolwiek rada? jeszcze raz dziękuję chłopaki – Rob

+0

HOLLY CRAP THIS SAVED ME - Cpt Cap-locks –

7

Twój XPath byłoby //div[contains(concat(' ', @class, ' '), ' result ') and not(contains(concat(' ', @class, ' '), ' grid '))]

+0

Jest to jedyna prawidłowa odpowiedź na to pytanie. Jak dotąd, najlepszą odpowiedzią jest –

+0

. działa jak marzenie. – kovpack

3

Składnia XPATH byłoby ...

//div[not(contains(@class, 'grid'))] 
Powiązane problemy