Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP xpath contains class and does not contain class

The title sums it up. I'm trying to query an HTML file for all div tags that contain the class result and does not contain the class grid.

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

Thanks!

like image 992
Rob Avatar asked Sep 06 '25 15:09

Rob


2 Answers

This should do it:

<?php
$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";
}

Your XPath would be //div[contains(concat(' ', @class, ' '), ' result ') and not(contains(concat(' ', @class, ' '), ' grid '))]

like image 37
crush Avatar answered Sep 08 '25 10:09

crush