PHP Simple HTML DOM-Parser: Wählen Sie nur die DIVs mit mehreren Klassen
War ich auf der Suche wie ein verrückter und keine Lösung gefunden. Das problem ist einfach.
Sagen wir, ich habe 3 DIVs:
<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>
So, sehr einfach. Ich möchte nur zu finden, die TEXT3, die BEIDE class1 und class2. Mit Simple HTML DOM-Parser, ich kann nicht scheinen, um es zu arbeiten.
Hier ist, was ich versucht habe:
foreach($html->find("[class=class1], [class=class2]") as $item) {
$items[] = $item->find('.subclass', 0)->plaintext;
}
Das problem ist, mit
find("[class=class1], [class=class2]")
es ist die Suche nach allen von Ihnen, wie das Komma ist wie ein ODER, wenn ich die Komma, sieht es für verschachtelte class2 innen class1. Ich bin gerade auf der Suche für ein-UND...
BEARBEITEN
Dank 19greg96 fand ich heraus, dass
div[class=class1 class2]
funktioniert, das problem ist, dass es sich für genau diese zwei-in dieser Reihenfolge. Sagen wir, ich habe
<div class="class1 class2">
<div class="subclass"> TEXT3 </div>
</div>
dann funktioniert es, und wenn ich
<div class="class1 class2 class3">
<div class="subclass"> TEXT3 </div>
</div>
funktioniert es, wenn ich ein asterix, wie sieht es für die substring:
div[class*=class1 class2]
PROBLEM
Ich weiß nur, dass die class1 und class3 ist es, aber vielleicht andere und in zufälliger Reihenfolge. Das immer noch nicht funktioniert. Keine Idee, wie suchen nur für A & B in einer zufälligen Reihenfolge? So, dass
div[class=class1 class3]
funktioniert mit diesem Beispiel?
- Sie wollen insbesondere Elemente mit den beiden .class1 und .class2, oder Elemente mit 2 oder mehr Klasse?
- nur Elemente mit beiden .class1 und .class2
- bearbeitet: problem nur teilweise gelöst
Du musst angemeldet sein, um einen Kommentar abzugeben.
EDIT2:
Da dies ein Fehler in den dom-parser (getestet auf version 1.5), es gibt keinen einfachen Weg, dies zu tun.
Lösung, die ich denken konnte:
grundsätzlich finden Sie alle Elemente mit der Klasse als eine Iteration durch die Elemente zu finden, dass die Klasse zwei (in diesem Fall drei).
Vorherigen Antwort:
Einfache Antwort (sollte funktionieren, laut html-Spezifikation):
diese Aussehen wird für jede Art von element (div,img, etc..), das sowohl class1 und class2. Wenn Sie möchten, geben Sie den Typ des Elements übereinstimmen, fügen Sie es zu Beginn ohne
.
wie:Wenn Sie ein Leerzeichen zwischen den beiden angegebenen Klassen entsprechen Elemente mit den beiden Klassen oder Elemente in der verschachtelten element mit der ersten Klasse:
entsprechen
oder
Bearbeiten:
Ich versuchte Ihren code, und gefunden, dass die oben genannten Lösungen nicht funktionieren.
Die Lösung, die funktioniert jedoch wie folgt:
find(".class1.class2")
nicht funktioniert, liegt möglicherweise ein Fehler in der html-parser. Die Lösung, die für mich gearbeitet wurde$html->find("div[class=class1 class2]")
Können Sie auch versuchen, diese :
test.html
Lösung :
$html->finden(div[class=classname1], div[class=classname2]);
oder
$html->finden(div.classname1, div.classname2);
Hatte ich gedacht, einfachen html-dom lassen Sie:
Aber ich denke mal nicht. Wechseln Sie zu diese Bibliothek wenn Sie wollen, dass.