PHP xpath包含类,不包含类

PHP xpath包含类,不包含类,php,xpath,domxpath,xpathquery,Php,Xpath,Domxpath,Xpathquery,标题概括了这一点。我试图在HTML文件中查询包含classresult且不包含classgrid的所有div标记 <div class="result grid">skip this div</div> <div class="result">grab this one</div> 跳过此div 抓住这个 谢谢 您的XPath应该是//div[contains(concat(“”,@class,,'result')而不是(contains(co

标题概括了这一点。我试图在HTML文件中查询包含class
result
且不包含class
grid
的所有div标记

<div class="result grid">skip this div</div>
<div class="result">grab this one</div>
跳过此div
抓住这个

谢谢

您的XPath应该是
//div[contains(concat(“”,@class,,'result')而不是(contains(concat(“”,@class,,),'grid'))
这应该可以做到:

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

XPATH语法将是

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

这也将与class=“*result”即“someResult”匹配。所以你得把空间集中起来。谢谢你的评论,这非常有帮助。至于解决方案,我肯定这会起作用,所以一旦我在电脑前验证了代码,我会给予奖励。最后一个问题:作为一个相对较新的程序员,我应该去哪里寻找我的解决方案?我觉得在SO上提问是懒惰的,而且谷歌提供了混乱的资源。有什么建议吗?再次感谢大家跟随@crush的评论,我认为正确的方法是
//div[contains(concat(“”,normalize space(@class),“”),'result')]
,或者
//div[@class and contains(concat(“”,normalize space(@class),“”),'result')]
。我没有太多尝试,只是//div[contains(@class,'result'),而不是contains(@class,'grid')]和//div[contains(@class,'result')][notcontains(@class,'grid')),但很明显,我的语法一开始就不正确