我疯了,发现没有解决方案。问题很简单。
假设我有3个DIV:
<div class="class1">
<div class="subclass"> TEXT1 </div>
</div>
<div class="class2">
<div class="subclass"> TEXT2 </div>
</div>
<div class="class1 class2">
<div class="subclass"> TEXT3 </div>
</div>
所以,非常简单。我只是想找到TEXT3,它有BOTH class1和class2。使用简单的HTML DOM Parser,我似乎无法让它工作。
这是我试过的:
foreach($html->find("[class=class1], [class=class2]") as $item) {
$items[] = $item->find('.subclass', 0)->plaintext;
}
问题是,
find("[class=class1], [class=class2]")
它找到所有这些,因为逗号就像一个OR,如果我留下逗号,它正在查找class1中的嵌套class2。我只是在找一个AND ...
感谢19greg96,我发现了
div[class=class1 class2]
有效,问题是它按顺序查找那两个。假设我有
<div class="class1 class2">
<div class="subclass"> TEXT3 </div>
</div>
然后它有效,如果我有
<div class="class1 class2 class3">
<div class="subclass"> TEXT3 </div>
</div>
当我放入一个asterix时它会起作用,因为它会查找子字符串:
div[class*=class1 class2]
问题
我只知道class1和class3在那里,但也许是其他的并且是随机顺序的。那仍然行不通。知道如何寻找A&amp; B在任何随机顺序?那么
div[class=class1 class3]
适用于那个例子吗?
答案 0 :(得分:19)
EDIT2: 由于这是dom解析器中的错误(在version 1.5上测试),因此没有简单的方法。 我能想到的解决方案:
$find = $html->find(".class1");
$ret = array();
foreach ($find as $element) {
if (strpos($element->class, 'class3') !== false) {
$ret[] = $element;
}
}
$find = $ret;
基本上你会发现所有带有第一类的元素,而不是遍历这些元素来找到那些具有第二类的元素(在这种情况下为三)。
上一个回答:
简单回答(应根据html规范工作):
find(".class1.class2")
这将查找具有class1和class2的任何类型的元素(div,img,a等..)。如果要指定要匹配的元素类型,请将其添加到开头,而不是.
,如:
find("div.class1.class2")
如果两个指定类之间有空格,它将匹配元素与第一个类中嵌套在元素中的类或元素:
find(".class1 .class2")
将匹配
<div class="class1">
<div class="class2">this will be returned</div>
</div>
或
<div class="class1 class2">this will be returned</div>
编辑: 我尝试了你的代码,发现上面的解决方案不起作用。 然而,确实有效的解决方案如下:
$html->find("div[class=class1 class2]")
答案 1 :(得分:1)
你也可以试试这个:
的test.html
int powerThroughRecursion(int n) {
if (n == 0) {
return 1;
}
if (n <= 1) {
return n;
}
return n * powerThroughRecursion(n - 1);
}
解决方案:
<h1 class="first second last">
<p>Paragraph</p>
</h1>
答案 2 :(得分:0)
$ html-&gt; find(div [class = classname1],div [class = classname2]);
或
$ html-&gt; find(div.classname1,div.classname2);
答案 3 :(得分:0)