Seite 1 von 1
Html Code parsen
Verfasst: 28. Mai 2008 11:49
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.
Verfasst: 28. Mai 2008 12:02
von PeterLustig
Ich verweise mal Dezent auf die
Suchfunktion. Suche dort nach "Html Parsen" und du findest Antworten.
Re: Html Code parsen
Verfasst: 28. Mai 2008 17:24
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/
Verfasst: 28. Mai 2008 19:44
von Sephral
Wenn Du nur bestimmte Informationen aus dem HTML-Code ausfiltern willst, dann geht das mit QRegExp ganz leicht.
Verfasst: 29. Mai 2008 10:25
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 ...
Verfasst: 29. Mai 2008 10:33
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.
Verfasst: 29. Mai 2008 10:41
von Sephral
Auch vom zeitlichen Ablauf her eine gewagte Aussage
HTML: 1989
XML: 1998
XHTML: 2000
Verfasst: 29. Mai 2008 12:01
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 ...
Verfasst: 29. Mai 2008 12:41
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.