# html-File nach txt-File konvertieren



## Axxel (26. Jan 2006)

Hi,

ich sitze nun schon seit längerem immer mal wieder an der Aufgabe, einen HTML-File in plain TXT umzuwandeln. Prinzipiell gibt es da ja genug Tools mit Gui, aber ich brauch es im Code, also eine Library am besten, da ich es nicht alles selbst machen will und es ja bestimmt irgendwo schon was gibt, das ich aber einfach nicht finde.

Bisher habe ich folgendes versucht: html2text bzw. html2txt unter Linux (Konsolenaufruf im Code), das funktioniert gut, hatten wir bis vor kurzem so gemacht, aber wenn man mal grad kein Linux zur Stelle hat, wie im Moment, ist man aufgeschmissen...
Zweiter Versuch (nach vielen anderen Fehlschlägen) war jetzt der Yoshicoder Konverter (http://people.iq.harvard.edu/~wlowe/Converter.html), der hat im ersten Moment gut funktioniert, ist nicht schwer zu bedienen, ist aber nur beta und bringt mir nun eine Fehlermeldung, die ich nicht wegbekomme, obwohl ich nichts geändert habe, nachdem es mal lief: 
	
	
	
	





```
Exception in thread "group2" java.lang.Error: HTMLScanner can't cope with 116 in state 21
```
 Ist irgendwas internes, die Eingabe stimmt jedenfalls. Vielleicht liegt es daran, dass der Aufruf in einem von mehreren Threads läuft? Aber wie gesagt,es lief schonmal...

Weiß jemand etwas, was ich noch probieren könnte, wo es andere Tools/Libs gibt? Ob ich einen File direkt eingeben muss bzw. bekomme oder einen String, ist mir prinzipiell egal. Kann man da relativ einfach irgendwie SAX, DOM, etc... verwenden?

Vielen Dank schonmal für die Antworten..

Gruß, Axxel


----------



## Bleiglanz (26. Jan 2006)

http://htmlparser.sourceforge.net/


----------



## flanker (26. Jan 2006)

Lade doch deine HTML-Datei in JEditorPane, dann sagst du: jep.getDocument().getText(x, y);


----------



## Axxel (26. Jan 2006)

extra einen Swing-Kontext erstellen? das ist nicht grade das Mittel meiner Wahl. Ich will weder Html-Seite, noch text-File jemals sehen, sondern nur intern verarbeiten, allerdings eben in plain-TXT. Der htmlParser, den Bleiglanz vorgeschlagen hat, bzw. das Sample dort, das den Text-Teil extrahiert, scheint mir etwas oberflächlich zu sein, so etwas wie Absätze brauche ich also schon auch im Txt-File und alles in einem Stück.
Vielleicht baue ich mir selber noch aus dem Html-Parser so ein Stück Code, aber erst, wenn alle Stricke reißen.

----edit-----

Also ich hab den Vorschlag mit der JEditorPane mal ausprobiert:


```
javax.swing.JEditorPane jpe = new javax.swing.JEditorPane();
jpe.setPage(htmlFile.toURL());
String s = jpe.getText();
```

aber was ich rausbekomme ist das hier:


```
<html>
  <head>

  </head>
  <body>
    <p style="margin-top: 0">
      
    </p>
  </body>
</html>
```

Habe ich noch was vergessen, dass die HTML-Seite richtig in die JEditorPane reingeladen wird?


----------



## flanker (26. Jan 2006)

editor.getText() gibt tatsächlich html Inhalt zurück,
editor.getDocument().getText(von, laenge) hingegen den Inhalt des Views.
JEditorPane kann zwar nicht alles korrekt darstellen, aber ich schätze, plain Text gibt er komplett zurück.
Das Thema gab's schon mal hier irgendwo vor kurzem...


----------



## Campino (27. Jan 2006)

Mit JDOM parsen und dann den Text aller Contents ausgeben (document.getRootElement().getChildren() usw...)


----------



## Axxel (27. Jan 2006)

Campino hat gesagt.:
			
		

> Mit JDOM parsen und dann den Text aller Contents ausgeben (document.getRootElement().getChildren() usw...)



aber ich könnte mir vorstellen, dass das Problematisch mit Absätzen und so ist, oder? Ich brauche den Text-File schon möglichst genauso, wie er im Browser angezeigt wird. Falls ich das Html aber doch noch selber parsen muss, ist DOM sicherlich ein Mittel der Wahl...

Was die Sache mit der JEditorPane angeht, das hab ich jetzt so gemacht:


```
javax.swing.JEditorPane jpe = new javax.swing.JEditorPane();
jpe.setPage(htmlFile.toURL());
String s = jpe.getDocument().getText(0, jpe.getDocument().getLength());
```

aber das ergibt überhaupt kein Ergebnis (leerer String) und dann kriege ich drei InterruptExceptions, was mit AWTShutdown, EventQueue und ReferenceQueue...

Habt ihr ne Idee, woran das liegt, dass da kein Ergebnis kommt?


----------



## flanker (27. Jan 2006)

Mein Vorschlag: lese die Datei mit io aus und dann übergibst du den Inhalt dem JEditorPane als String (mit setText()), zusätzlich kannst du noch setContentType("text/html"); setzen. Wenn's funktioniert, liegt der Fehler höchstwahrscheinlich an URL.
Ansonsten printStackTrace() posten, oder die html-Datei selbst, mal schauen...


----------



## Murray (27. Jan 2006)

Campino hat gesagt.:
			
		

> Mit JDOM parsen und dann den Text aller Contents ausgeben (document.getRootElement().getChildren() usw...)


Das geht aber auch nur, wenn es xhtml ist; beliebige HTML-Seiten aus dem Web sind leider nur selten well-formed-XML und gehen daher nicht durch einen XML-Parser


----------



## Roar (27. Jan 2006)

Axxel hat gesagt.:
			
		

> aber ich könnte mir vorstellen, dass das Problematisch mit Absätzen und so ist, oder? Ich brauche den Text-File schon möglichst genauso, wie er im Browser angezeigt wird.



wenn das so sein soll wirst du mit herkömmlichen mitteln nicht weit kommen, das wär dann ja schließlich ne mehr oder weniger komplette browserengine :?


----------



## flanker (27. Jan 2006)

ja, dann nutzt dir JEditorPane nicht, denn damit werden höchstens die Zeilenumbüche eingehalten...


----------



## Axxel (29. Jan 2006)

jepp, habe es hingekriegt und genau das festgestellt


----------



## byte (29. Jan 2006)

eine html datei kannst du halt nicht mal eben so mit korrekter formatierung in ein textformat exportieren. das klappt vielleicht bei formaten wie pdf, weil dort exakte formatierungsinformationen enthalten sind. aber html dateien werden erstmal vom browser interpretiert. der browser ist halt größtenteils verantwortlich dafür, wie die html datei am ende aussieht.


----------



## Axxel (29. Jan 2006)

naja, aber am ende sehen Texte ja in jedem Browser zumindest ähnlich aus. Und es gibt da ja auf jedenfall auch Tools, die alles korrekt umwandeln, so wie man es erwartet. Aber entweder sie sind nur mit GUI oder aber die Linux-Konsolenanwendungen. Ich will es aber möglichst plattformunabhängig...

Naja, ich probiere mal weiter...


----------



## Guest (1. Feb 2006)

also ich habe jetzt eine Lösung gefunden. Ich bin letztendlich doch wieder beim Yoshikoder Converter gelandet.
Nach etwas Rumprobieren wollte er dann auch lokale Dateien nehmen und das gibt ganz gute Ergebnisse...


----------



## clemson (2. Feb 2006)

vielleicht hilfts dieser link ja jemanden weiter, der auch dieses problem hat...

link zu open source html parsern


----------

