Seite 1 von 1

HTML-Code-Elemente in php zerlegen

Verfasst: 20.01.2007, 01:32
von Kralle
Ich stehe momentan vor einem Problem, oder sagen wir besser Aufgabe.

Es geht darum einen HTML-Code der über PHP included wurde in seine Bestandteile zu zerlegen, sprich in seine einzelnen div-Container. Diese div-Container haben jeweils eine unique id.
Das Problem bei der Sache ist, daß hier divs oft verschachtelt vorliegen, also z. B.

Code: Alles auswählen

<div id="1">
   <div id="3">
      <div id="5">
      </div>
      <div id="2">
         <div id="4">
         </div>
      </div>
   </div>
</div>
Den div4 oder 1 jetzt auszulesen wäre ja kein Problem, weil keine substituierten Tags enthalten sind, bzw. sich das ganz einfach über preg_match und regexp auslesen läßt.
Aber wenn ich jetzt z. B. div Nr. 2 inkl. aller Inhalte haben möchte, stehe ich vor einem Problem.

Wie kann ich den Code so zerstückeln, daß ich exakt div2 erhalte inkl. aller sich öffnender und schließender Tags?

Der Code den ich include ist zwar valide, aber sagen wir mal "eigenwillig". Es gäbe auch noch andere Möglichkeiten auf dem Weg nach Rom, ich hätte aber gerne eine solche narrensichere Lösung, also praktisch die einzelnen divs nacher zerlegt nach id.

Irgendwie konnte ich da keinen Standard dazu finden.

Vorweg: ich habe die Erlaubnis den Code zu parsen :wink:

Verfasst:
von
SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Verfasst: 20.01.2007, 01:51
von net(t)worker
weitere Info per ICQ ermittelt:

zwischen den obigen divs können auch beliebige andere HTML Tags vorkommen, u.a. auch wieder div's....

macht die Sache nicht gerade einfach... ich denke da wird er einen richtigen parser brauchen, hab mal auf gut glück https://pear.php.net/package/XML_HTMLSax3 vorgeschlagen...

hat jemand weitere Ideen/Lösungsvorschläge...

Verfasst: 20.01.2007, 02:51
von Kralle
Mir ist noch was eingefallen. Die id über preg_match anzuspringen, und dann über eine while-Schleife mit Zähler öffnende und schließende divs zu zählen um dann beim letzten schließenden </div> zu schließen. Müsste eigentlich funzen. Morgen gleich mal testen :D
Außer jemand hat eine Standardlösung für solche Probleme. Ist ja eigentlich nichts ungewöhnliches.

Verfasst: 20.01.2007, 12:18
von 800XE
Kralle hat geschrieben:mit Zähler öffnende und schließende divs zu zählen
Das ist der richtige Weg .... anders gehts nicht

Ich würd das Klassisch mit strcmp oder so machen ....
bzw
if ( $string[$i] == '<' )
.... jetzt prüfen ob ein tag wie gesucht, ob öffnent oder schliesend
.... bei öffnend $schachtel++
.... bei schliesend if ( $schachtel > 0 ) $schachtel--; else //ende mit Whileschleife

Verfasst: 20.01.2007, 12:19
von twitch
nur mal ne Idee,
warum nicht mit preg_match("^(.*)<div(.*)>(.*)</div>(.*)$=msi",$inhalt,$array) alle divs in ein array schreiben ($array[3] wäre das mit der obigen regexe)und dann mit einer While-Schleife durchlaufen und dabei nach id=x suchen...

ist ungetestet und die regexe kann noch ein paar fehler enthalten