html parsen

Alles rund um die Programmierung mit Qt
Antworten
samsamsam
Beiträge: 43
Registriert: 9. Juni 2009 16:22
Wohnort: Dortmund

html parsen

Beitrag von samsamsam »

Hallo,

ich habe ein Problem mit dem Parsen von HTMLs. Ich programmiere gerade ein Tool, welches guibasierend die qt-help für ein programm generiert (qhp und qhcp files bzw qch und qhc) . in diesem zuge sollen html-files automatisch erstellt werden und auch html-files eingelesen und in den baum (eigene baumklasse) überführt werden. html nach xml umwandeln geht nicht, da html nicht wohldefiniert ist (ständiger wechsel zw. bold, italic, ...). also parse ich selbst.

meine frage ist: wie kann ich QRegExp benutzen, um z.b. aus dem html-text alle kommentare zu entfernen?

Code: Alles auswählen

<!--  kommentar 1 -->
.
.
.
<!--  kommentar n -->
oder um z.b. einzelne abschnitte zu extrahieren:

Code: Alles auswählen

<h1 class = "TOCHead" align = "center">Meine_Ueberschrift</h1>
<h2 class = "TOCSubhead" align = "left"><a name="Unterkapitel1_Ueberschrift"></a>Unterkapitel1_Ueberschrift</h2>

.
.
.

<h2 class = "TOCSubhead" align = "left"><a name="Unterkapitel2_Ueberschrift"></a>Unterkapitel2_Ueberschrift</h2>

.
.
.
Ich hab selbst einige css-klassen definiert (Fliesstext, TOCSubhead,....) und von daher sehen die elemente immer anders aus

Code: Alles auswählen

<p class = "..."> .... </p>
<h2 class = "..."> .... </h2>
ich würde gerne aus dem html-dokument ein tree bauen und bräuchte dazu eine liste aller elemente in der reihenfolge, wie sie im html ist. Kennt sich jemand mit QRegExp und wüsste evtl. wie das zu lösen wäre?
androphinx
Beiträge: 170
Registriert: 26. Januar 2009 09:19
Wohnort: 127.0.0.2

Beitrag von androphinx »

Warum brauchst du dafür unbedingt eine RegExp? Ein einfaches:

Code: Alles auswählen

QString.indexOf("<!--", i);
sollte es auch tun, entsprechend dann auf die anderen Anfänge, Ende angewendet.

Ansonsten wäre eine RegExp für deinen Fall:

Code: Alles auswählen

<!-- .* -->
oder was du entsprechend für deine Header brauchst...

Mfg androphinx
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

Mit nem "richtigen" Parser koenntest Du natuerlich auch Tags ueberspringen/ignorieren (Bold/italic und sowas) sondern nur hauptstrukturen beachten.

Aber was ist ein richtiger HTML-Parser ?
Geschichte von HTML aus Zeiten, bevor Flash und Silverlight und so Dinge dominierend den Bildaufbau kontrolliert haben:
HTML ist ein Subset, eine bestimmte Auspraegung (vordefinierte Tags) von SGML. Mit einem SGML Parser solltest schon Html seiten parsen koennen ohne selber strings zu zerlegen ...

Uebrigens nutzen alle html editoren die so baumstrukturen fuer html anbieten sowas auch.

Wenn glueck hasst, ist dein HTML sogar HTMLX also XML kompatibel. Dann kannst sogar QXML drauf hetzen ...

Ciao ...
drewle
Beiträge: 38
Registriert: 4. März 2008 20:59
Kontaktdaten:

Beitrag von drewle »

Hallo,
ich hatte auch das Problem, dass ich html einlesen wollte und nicht in XML umwandeln wollte. Ich habe mir dafür eine Klasse geschrieben und auf Sourcerforge gestellt (LGPL):
http://sourceforge.net/projects/sgml-for-qt/

Eine Beschreibung dazu findest Du unter:
http://sourceforge.net/apps/mediawiki/s ... =Main_Page

Ich hoffe das es Dir weiter hilft!

Drewle
Hic Rhodos Hic Salta
http://www.hic-net.de
Antworten