Hallo,
ich bin am verzweifeln und brauche bitte Eure Hilfe.
Kurz was ich machen möchte.
Aus einer html datei sollen die überschriften die über einer Tabelle sind herausgezogen werden, also die html-Tags <T4>.
Die Zeilen, also die html-Tags <TR> sollen erkannt werden.
Die Zellen, also die html-Tags <TD> sollen erkannt werden.
Das funktioniert auch fast alles. Leider bekomme ich es nicht hin wenn ich die in der Klasse auskommentierten Zeilen für den <TD> Tag einkommentiere, dann werden die <TR> tags ÜBEGANGEN, meint es erfolgt keine Ausgabe.
Als Ergebnis soll ein sog. INSERT statement herauskommen also in etwa so:
INSERT INTO T_überschrift VALUES ('reihe 1 zelle 1', 'reihe 1 zelle 2', 'reihe 1 zelle 3')
Das ganze mache ich mit dem javax.swing.text.html.* da ich nichts anderes zum html datei parsen gefunden habe.
ich hoffe ich konnte meine Frage klar formulieren, anbein noch die class und meine test-html-datei.
Die class:
Die zu parsende html datei:
Vielen Dank schon jetzt für Eure Hilfe
ich bin am verzweifeln und brauche bitte Eure Hilfe.
Kurz was ich machen möchte.
Aus einer html datei sollen die überschriften die über einer Tabelle sind herausgezogen werden, also die html-Tags <T4>.
Die Zeilen, also die html-Tags <TR> sollen erkannt werden.
Die Zellen, also die html-Tags <TD> sollen erkannt werden.
Das funktioniert auch fast alles. Leider bekomme ich es nicht hin wenn ich die in der Klasse auskommentierten Zeilen für den <TD> Tag einkommentiere, dann werden die <TR> tags ÜBEGANGEN, meint es erfolgt keine Ausgabe.
Als Ergebnis soll ein sog. INSERT statement herauskommen also in etwa so:
INSERT INTO T_überschrift VALUES ('reihe 1 zelle 1', 'reihe 1 zelle 2', 'reihe 1 zelle 3')
Das ganze mache ich mit dem javax.swing.text.html.* da ich nichts anderes zum html datei parsen gefunden habe.
ich hoffe ich konnte meine Frage klar formulieren, anbein noch die class und meine test-html-datei.
Die class:
Java:
package html2database;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import javax.swing.text.MutableAttributeSet;
import javax.swing.text.html.HTML;
import javax.swing.text.html.HTMLEditorKit;
import javax.swing.text.html.parser.ParserDelegator;
public class NewClass {
// start tags
private static final short NO_ENTRY = 0;
private static final short H4_ENTRY = 1;
private static final short TR_ENTRY = 8;
private static final short TD_ENTRY = 3;
// end tags
private static final short H4_END_ENTRY = 4;
private static final short TR_END_ENTRY = 5;
private static final short TD_END_ENTRY = 6;
private static short state;
// die zu erzeugenden Strings
private static StringBuilder reiheInhalt = new StringBuilder();
private static StringBuilder zellInhalt = new StringBuilder();
/** The most recently parsed tag. */
private static HTML.Tag tag;
/** The last tag encountered. */
private static HTML.Tag lastTag;
public static void main(String[] args) throws FileNotFoundException, IOException {
Reader reader = new FileReader("e:/myFile.html");
ParserDelegator parserdelegator = new ParserDelegator();
HTMLEditorKit.ParserCallback callback =
new HTMLEditorKit.ParserCallback() {
String tabelleName = "";
public void handleText(char[] data, int pos) {
switch (state) {
case NO_ENTRY:
break;
case H4_ENTRY:
StringBuilder s = new StringBuilder();
for (int i = 0; i < data.length; ++i) {
s.append(data[i]);
}
System.out.println("Die Überschrift = " + s.toString());
tabelleName = s.toString();
state = NO_ENTRY;
break;
case TR_ENTRY:
System.out.println("Jetzt in der Zeile = " + tabelleName);
System.out.println(data);
reiheInhalt.append("INSERT INTO t_");
reiheInhalt.append(tabelleName);
reiheInhalt.append(" VALUES(");
System.out.println(reiheInhalt.toString());
state = NO_ENTRY;
break;
case TD_ENTRY:
zellInhalt.append("'");
zellInhalt.append(data);
zellInhalt.append("'");
System.out.print(" " + zellInhalt.toString());
zellInhalt.delete(0, 1000);
state = NO_ENTRY;
break;
case TR_END_ENTRY:
break;
default:
break;
}
state = NO_ENTRY;
}
public void handleStartTag(HTML.Tag tagstart, MutableAttributeSet TR, int pos) {
if (tagstart == HTML.Tag.H4) {
state = H4_ENTRY;
}
if (tagstart == HTML.Tag.TR) {
state = TR_ENTRY;
}
// ******** Wenn diese Zeilen einkommentiert werden werden die Zeilen nicht erkannt :o( ***********
// if (tagstart == HTML.Tag.TD) {
// state = TD_ENTRY;
// }
// ******** Wenn diese Zeilen einkommentiert werden werden die Zeilen nicht erkannt :o( ***********
}
public void handleEndTag(HTML.Tag t, int pos) {
lastTag = tag;
tag = t;
if (t == HTML.Tag.TR && lastTag == HTML.Tag.TD) {
// System.out.println(" neue end Zeile einfügen");
reiheInhalt.delete(0, 100);
state = TR_END_ENTRY;
}
}
};
parserdelegator.parse(reader, callback, true);
}
}
HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<META http-equiv="content-type" content="text/html; charset=windows-1250">
<META name="generator" content="PSPad editor, www.pspad.com">
<TITLE>Der Titel</TITLE>
</HEAD>
<BODY>
<H4>HitoryEntries</H4>
der text im bodey
<TABLE bgcolor="#669999" bordercolorlight="#669900" title="titel der tabelle">
<TR>
<TD>reihe 1 feld 1</TD>
<TD>reihe 1 feld 2</TD>
<TD>reihe 1 feld 3</TD>
</TR>
<TR>
<TD>reihe 2 feld 1</TD>
<TD>reihe 2 feld 2</TD>
<TD>reihe 2 feld 3</TD>
</TR>
</TABLE>
<H4>FutureEntries</H4>
BlaBlaBla
<TABLE bgcolor="#669999" bordercolorlight="#669900" title="titel der tabelle">
<TR>
<TD>tabelle 2 reihe 1 feld 1</TD>
<TD>tabelle 2 reihe 1 feld 2</TD>
<TD>tabelle 2 reihe 1 feld 3</TD>
</TR>
<TR>
<TD>tabelle 2 reihe 2 feld 1</TD>
<TD>tabelle 2 reihe 2 feld 2</TD>
<TD>tabelle 2 reihe 2 feld 3</TD>
</TR>
</TABLE>
</BODY>
</HTML>
Vielen Dank schon jetzt für Eure Hilfe