Liebe Mitdenker,
liebe Wissende,
liebe Neugierige,
ja!
ich suche eine Empfehlung für eine gute HTML-Parser-Klasse.
Wie UP schon in schrieb, sollte ich mein Anliegen nochmal genauer darlegen.
Ich will aus einer fertigen (validen) Seite einzelne HTML-Elemente auslesen können und diese dann durch andere ersetzen, also z.B. eine Tabelle aus der Seite holen und durch eine andere (oder anders ausgefüllte) ersetzen.
Teil 1 scheint mit den DOMDocument-Klassen zu funktionieren. Ich muss mich allerdings noch genauer damit beschäftigen, welche Methoden aus welcher Unterklasse da was leisten. Aber ein paar aus dem Web zusammengeklaubte Lösungsansätze gehen schon in die richtige Richtung. Leider haben die alle ihre Macken bei Rekursion und Konsequenz. Aber das traue ich mir zu, repariert zu bekommen - wenn es nicht eine fertige Funktion / Methode dafür gibt. Das Rad nochmal zu erfinden, habe ich keine Zeit...
Ich möchte aus dem Dokument
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>DomDocument</title>
</head>
<body>
<div id="main">
<div id="left">1</div>
<div id="center">2</div>
<div id="right">3</div>
</div>
<table id="t001">
<tr id="t001-tr001">
<td>1-Eins</td>
<td>1-Zwei</td>
<td>1-Drei</td>
</tr>
<tr id="t001-tr002">
<td>2-Eins</td>
<td>2-Zwei</td>
<td>2-Drei</td>
</tr>
</table>
<table id="t002">
<tr id="t002-tr001">
<td>2-Eins</td>
<td>2-Zwei</td>
<td>2-Drei</td>
</tr>
</table>
</body>
</html>
z.B. die Tabelle t001 extrahieren und als Array darstellen.
# Element = $table
# id = tr001
Array
(
[@attributes] => Array
(
[id] => t001
)
[tr] => Array
(
[0] => Array
(
[@attributes] => Array
(
[id] => t001-tr001
)
[td] => Array
(
[0] => Array
(
[@attributes] => NULL
[#text] => 1-Eins
)
[1] => Array
(
[@attributes] => NULL
[#text] => 1-Zwei
)
[2] => Array
(
[@attributes] => NULL
[#text] => 1-Drei
)
)
)
[1] => Array
(
[@attributes] => Array
(
[id] => t001-tr002
)
[td] => Array
(
[0] => Array
(
[@attributes] => NULL
[#text] => 2-Eins
)
[1] => Array
(
[@attributes] => NULL
[#text] => 2-Zwei
)
[2] => Array
(
[@attributes] => NULL
[#text] => 2-Drei
)
)
)
)
)
Das ist jetzt nur ein Beispiel und müsste ggf. noch erweitert werden.
Dann möchte ich an der Stelle im HTML-Dokument, an der die Tabelle stand, eine veränderte einfügen. Aus dem Array wieder HTML zu erzeugen, ist da sicher nicht das Problem, sondern nur, genau die alte Tabelle auszuschneiden und die Position zu liefern, an der sie begann.
Solange man Validität voraussetzen kann, könnte das alles sogar ohne größeren Aufwand funktionieren.
Ich habe hoffentlich am Wochenende noch Zeit, mich weiter darum zu kümmern. Dann geht es hier weiter.
Spirituelle Grüße
Euer Robert
--
Möge der Forumsgeist wiederbelebt werden!