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