Html Code parsen

Alles rund um die Programmierung mit Qt
Antworten
Treehouse
Beiträge: 100
Registriert: 18. Juni 2007 10:21

Html Code parsen

Beitrag von Treehouse »

Hallo,

ich würde gerne für ein kleines Projekt Qt4 einsetzen. Da ich sehr viel Html code parsen muss wollte ich euch fragen wie leicht oder schwer es ist sowas mit Qt4 zu bewerkstelligen.
Vielleicht kann mir jemand auch sagen welche Klassen dafür benötigt werden. Aber es sollte schon alles in Qt4 oder reinem C++ gemacht werden damit es Plattform unabhänig ist.

Gruß

Treehouse

PS: Vielleicht wenn es nicht all zuviel mühe bereitet wäre ein kleines Beispiel schön.
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

Ich verweise mal Dezent auf die Suchfunktion. Suche dort nach "Html Parsen" und du findest Antworten.
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Re: Html Code parsen

Beitrag von patrik08 »

Treehouse hat geschrieben:Hallo,

ich würde gerne für ein kleines Projekt Qt4 einsetzen. Da ich sehr viel Html code parsen muss wollte ich euch fragen wie leicht oder schwer es ist sowas mit Qt4 zu bewerkstelligen.
.
Html ist nicht immer HTML code wenn du XHTML resultate moechtest
dann fuege den ganzen code in einen QTextDocument

QTextDocument *doc = new QTextDocument();
doc->setHtml(html);

Dann ist es moeglich jedes einzelne bild tabelle oder was sonst zu sortieren oder in andere formate zu bringen wie xsl-fo openoffice u.n.s.w.

dann kann man das dokument parsen und bearbeiten wie...
http://doc.trolltech.com/4.0/richtext-structure.html

wie das ganze wieder html wird sieht man bei:
http://www.bessrc.aps.anl.gov/software/ ... ource.html

Code: Alles auswählen

/* die rootFrame hat im grunde der body des dokument 
das mann mit einem iterator durchparsen kann */
FrameLoop(doc->rootFrame()->begin(),body);  /* body ist teil von einem xml */


void QdocXhtml::FrameLoop( QTextFrame::Iterator frameIt , QDomElement appender )
{
	BigframeProcessing++;
	
	  if (!frameIt.atEnd()) {
         QTextFrame::Iterator next = frameIt;
         ++next;
         if (next.atEnd() && frameIt.currentFrame() == 0 && 
					   frameIt.parentFrame() != doc->rootFrame() && 
				     frameIt.currentBlock().begin().atEnd()) {
     /* ende dokument */
             return;
				 }
     }
		 
		 for (QTextFrame::Iterator it = frameIt;  !it.atEnd(); ++it) {
			 if (QTextFrame *f = it.currentFrame()) {
			     if (QTextTable *table = qobject_cast<QTextTable *>(f)) {
						   /* table here */
               HandleTable(table,appender);   /* tabelle bearbeiten */
            } else {
							  /* other simple table from QTextDocument like <div> htmls */
							  QTextFrameFormat format = f->frameFormat();
							  QDomElement inlinediv = dom.createElement("var");
							  PaintFrameFormat(inlinediv,format);
							  appender.appendChild(inlinediv);
                                      /* naechter frame block */
							  FrameLoop(f->begin(),inlinediv);
						}
			 } else if (it.currentBlock().isValid()) {
                                       /* normaler paragraph */
					HandleBlock(it.currentBlock(),appender); 
			 }
		 }
}



QTextDocument macht fuer meinem geschmack zu viele css style fuer das web...
So bringe ich nur das notwendigste raus beisbiel:

http://fop-miniscribus.googlecode.com/s ... cxhtml.cpp
http://fop-miniscribus.googlecode.com/s ... docxhtml.h

Das dokument bearbeiten beispiel im code:
http://www.qt-apps.org/content/show.php ... tent=80234
oder ganz einfach ....
http://www.wysota.eu.org/wwwidgets/doc/ ... tedit.html
http://www.wysota.eu.org/wwwidgets/
.........................
speack português italiano deutsch english castellà qt
Sephral
Beiträge: 201
Registriert: 1. Februar 2006 09:40
Kontaktdaten:

Beitrag von Sephral »

Wenn Du nur bestimmte Informationen aus dem HTML-Code ausfiltern willst, dann geht das mit QRegExp ganz leicht.
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

Wenn du den aufbau des HTML dokumentes kennst ....

html ist nur speziellere Form von xml ...
sich in nem DomDocument durchnavigieren ist total easy ...
Teile (DomNodes) aus nem document ausschneiden und bearbeiten ist noch easier ...

selbst mit nem SAX sollt es recht einfach gehen ....

die Frage ist eher was genau (und wie performant) du machen willst, um mit html zu operieren gibts halt viele möglichkeiten, also sollte dein Ziel scho auf die wegfindung einfluss nehmen ...

Ciao ...
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

RHBaum hat geschrieben:Wenn du den aufbau des HTML dokumentes kennst ....

html ist nur speziellere Form von xml ...
HTML ist KEINE Form von XML! XHTML ist eine Form von XML, aber nicht HTML.

Ein Beispiel: <img src="bla.."><br>
Das ist valides HTML, aber in XML würde der Parser dich rausschmeißen, da du zwei Tags öffnest, sie aber nie schließt.

Bitte informiere dich erst richtig, bevor du solche Halbwahrheiten oder falsche Informationen verbreitest.
Sephral
Beiträge: 201
Registriert: 1. Februar 2006 09:40
Kontaktdaten:

Beitrag von Sephral »

Code: Alles auswählen

html ist nur speziellere Form von xml ...
Auch vom zeitlichen Ablauf her eine gewagte Aussage :-)

HTML: 1989
XML: 1998
XHTML: 2000
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

Urks, stimmt, ned XML sondern SGML ....
Womit natuerlich auch ned das qXML verwenden kannst ...

Wenn er die das html generiert, sollt er eh XHTML verwenden,
ansonsten muess/sollt er nen sgml parser (SP) nehmen ....

Ciao ...
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

Wie man einem anderen Beitrag (welchen man kinderleicht über die Suchfunktion findet) bereits erwähnt, kann TidyXHTML auch HTML zu XHTML umwandeln, sodass man es leichter auslesen kann.


Einfach mal die Suchfunktion nutzen und alte Beiträge lesen.
Antworten