HTML Scanner
Torsten
- java
Hallo,
ich bin mir nicht sicher ob mein Thema in dieses Forum passt, aber ich versuch es einfach mal.
Ich bin noch ein Java-Anfänger und soll mit einem Java Programm bestimmte Daten (Textstellen) aus einem HTML-File raussuchen.
Jeoch hab ich keine Ahnung wie ich ein HTML-Dokument was zig Zeilen lang ist struktieriert durchsuchen soll.
Es gibt ja schon diverse HTML-Scanner, aber die scheinen auch alle nicht zu funktionieren.
Hat hier jemand schon mal so was ähnliches gemacht und kann mir weiterhelfen wie ich da am besten ranngehe?
MFG Torsten
Moin!
Hallo,
ich bin mir nicht sicher ob mein Thema in dieses Forum passt, aber ich versuch es einfach mal.
Ich bin noch ein Java-Anfänger und soll mit einem Java Programm bestimmte Daten (Textstellen) aus einem HTML-File raussuchen.
Macht nichts. Ich habe von Java gar keine Ahnung, aber schon ein paar Seminare zu dem Thema gehalten. Sind alle sehr gut bewertet worden...
Jeoch hab ich keine Ahnung wie ich ein HTML-Dokument was zig Zeilen lang ist struktieriert durchsuchen soll.
Die Zeilen kannst Du hier völlig unbeachtet lassen. Genau genommen macht das ein Webbrowser außerhalb von <pre>..</pre> auch.
Es gibt ja schon diverse HTML-Scanner, aber die scheinen auch alle nicht zu funktionieren.
Nun ja. Viele Browser funktionieren mit vielen HTML-Quelltexten auch nicht. Das hängt nicht zuletzt vom HTML, also dessen Validität ab.
Nun. Einfach alles innerhalb von < > und diese selbst auch ignorieren/Löschen.
Am einfachsten dürfte es sein, das Objekt String Stelle für Stelle durchzugehen (Es ähnelt einem Array) und sobald man auf ein "<" trifft dieses und die folgenden Zeichen zu ignorieren und sobald man auf ein ">" ab dem nächsten Zeichen jeweils dieses an einen neuen String anzuhängen.
Zuletzt müssen noch die sogenannten Entities & (&) < (<) " ("), ö (ö) e.t.c. in ihre ursprüngliche texttuelle Bedeutung verwandelt werden. Dafür gibts Tabellen. Vielleicht willst Du auch Zeilenumbrüche erst mal rausschmeissen und nach oder vor jedem Tag (<>)einen einfügen.
Vieleicht willst Du auch Aufzählungen und Listen entsprechend markieren...
Das Stichwort ist "regex" oder regular expressions.
Ich kann mir aber nicht vorstellen, dass es dafür nicht schon fertige Klassen gibt.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Hm, danke für die Tips, werde mich da mal im netz kundig machen
MFG
Torsten
Hi,
Nun. Einfach alles innerhalb von < > und diese selbst auch ignorieren/Löschen.
Nein, das funktioniert leider nicht. Alleine schon wenn etwas Javascript mit drin ist:
if(i < foo && j > bar)
Du müßtest also schonmal alles zwischen <script> und </script> rauswerfen. Dann gibt es noch die eine und auch andere Kleinigkeit und schon hast Du einen kompletten Lexer gebastelt und vier Wochen sind um.
Sowas geht also nur, wenn man das HTML gut kennt, am besten sogar noch dafür garantieren kann, das es valides XHTML ist. Im letztgenanntem Fall würde sogar Dein Algorithmus funktionieren (zumindest fast).
Es ist also im Allgemeinem günstiger zu prüfen, ob sich der Bedarf etwas einschränken läßt, wie Du auch ganz richtig erwähnt hast. Z.B. nachzuschauen, ob man nur Listen oder Tabellen benötigt, oder das Wichtige immer in einem <div id="momentous">wichtig!</div> steht o.ä.
Da ich ansonsten außer obiger Kleinigkeit rein gar nix an Deinem Posting auszusetzen habe frage ich mich: wer mag Dich denn nicht, das er Dir für Dein Posting ein "nicht hilfreich" setzt?
so short
Christoph Zurnieden
Die html-datei enthält kein javascrit.
die wichtigen inforamtionen die ich benötige sind in verschiedenen tabellen gespeichert.
in wiefern könnt ich das denn für meine suche nutzen?
was bietet sich an um die vielen daten aus den tabellen zu speichern?
ein String[][] array? oder gibt es da noch bessere möglichkeiten?
MFG
Torsten
Hi,
Die html-datei enthält kein javascrit.
die wichtigen inforamtionen die ich benötige sind in verschiedenen tabellen gespeichert.
in wiefern könnt ich das denn für meine suche nutzen?
Wenn Du genau weißt wie die Formatierung aussieht kannst Du das direkt nutzen. Wenn die Formatierung auch noch sauber ist und nicht mit Layouttabellen herumgewurschtelt wurde kannst Du die Tabellen direkt parsen:
<table -> Tabellenanfang
<tr> -> Zeilenanfang
<td> -> Zellenanfang
</td> -> Zellenende
</tr> -> Zeilenende
</table -> Tabellenende
Neben Layoutspielereien können natürlich auch "verbundene Zellen" auftauchen. Tun sie das mußt Du halt leider die Tabellenkonstrukte vollständig parsen.
was bietet sich an um die vielen daten aus den tabellen zu speichern?
Eine Festplatte?
SCNR ;-)
ein String[][] array? oder gibt es da noch bessere möglichkeiten?
Da ich Deine Datenstruktur und vor allem die eigentliche Aufgabe nicht kenne mag ich da keinen Rat geben, er könnte völlig falsch liegen.
so short
Christoph Zurnieden
Moin!
Da ich ansonsten außer obiger Kleinigkeit rein gar nix an Deinem Posting auszusetzen habe frage ich mich: wer mag Dich denn nicht, das er Dir für Dein Posting ein "nicht hilfreich" setzt?
Tja. Der Frager war es nicht. Offensichtlich jemand, der selbst nichts beizutragen hatte. Also niemand, dessen Wertung mich stört- oder halt jemand, der sich verklickt hat. Was solls also.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Hallo,
Da ich ansonsten außer obiger Kleinigkeit
Kleinigkeit? Finde ich nicht.
rein gar nix an Deinem Posting auszusetzen habe
Was ist mit < und > in Kommentaren? Was ist mit < und > in String-Literalen?
Die nennst du auch nicht. Von invalidem Code möchte ich gar nicht
erst anfangen. Du stellst aber bereits richtig fest, daß man, wenn
man alle diese Fälle beachtet, gleich einen richtigen Lexer schreiben
kann. ...Oder eben einen fertigen nehmen.
frage ich mich: wer mag Dich denn nicht, das er Dir für Dein Posting ein "nicht hilfreich" setzt?
Ein Klick auf "nicht hilfreich" hat selten etwas mit persönlichen
Präferenzen der Person gegenüber zu tun und sollte es auch nicht haben.
Ich habe auf "nicht hilfreich" geklickt, weil die Antwort in dieser
Form absolut nicht hilfreich, eher sogar kontraproduktiv ist. Dein
Einwand ist da schon besser. Der stand aber noch nicht da, als ich
geklickt habe. (Und eigentlich interessiert das auch nicht.)
Du kannst übrigens gerne auf "hilfreich" klicken, wenn du fastix
Antwort für hilfreich hieltst, also meine (und die andere) Bewertung
in Bezug auf die Archivierung revidieren willst.
Es ist also im Allgemeinem günstiger zu prüfen, ob sich der Bedarf etwas einschränken läßt, wie Du auch ganz richtig erwähnt hast.
Wo hat er das erwähnt? Hätte er das erwähnt, hätte ich wohl nicht
auf "nicht hilfreich" geklickt.
Gruß
Slyh
Hi,
ich finde es ja sehr respektabel, das Du Dich zu erkennen gibst, wenn auch Anonym, aber nicht ich bin derjenige, der eine Begründung verdient hat.
So, damit ist der Höflichkeit Genüge getan und los geht's ;-)
Da ich ansonsten außer obiger Kleinigkeit
Kleinigkeit? Finde ich nicht.
Größe ist nunmal relativ subjektiv.
rein gar nix an Deinem Posting auszusetzen habe
Was ist mit < und > in Kommentaren? Was ist mit < und > in String-Literalen?
Ich wollte die Beckmesserei nicht zu weit treiben. Zudem ist sie recht zweckfrei, da es nunmal nicht funktioniert etwas _nicht_ zu wollen. Die Definition von Text in HTML ist nunmal nicht "alles außerhalb der Tags" sondern es gibt genau definierte Textknoten. Alleine diese Definition würde schon nach einem vollständigem Parser verlangen.
Du kannst übrigens gerne auf "hilfreich" klicken,
Nein, das kann ich nicht.
Es ist also im Allgemeinem günstiger zu prüfen, ob sich der Bedarf etwas einschränken läßt, wie Du auch ganz richtig erwähnt hast.
Wo hat er das erwähnt? Hätte er das erwähnt, hätte ich wohl nicht
auf "nicht hilfreich" geklickt.
Vieleicht willst Du auch Aufzählungen und Listen entsprechend markieren...
Ich habe das dahingehend interpretiert.
Vielleicht bin ich aber auch zu rücksichtsvoll.
so short
Christoph Zurnieden
Hallo,
ich finde es ja sehr respektabel, das Du Dich zu erkennen gibst, wenn auch Anonym,
Anonym? Ich? Ich glaube ich bin hier ähnlich anonym wie Cheatah oder
Christian Kruse.
aber nicht ich bin derjenige, der eine Begründung verdient hat.
Ich glaube, das Posting hier kann jeder lesen, der mag.
Kleinigkeit? Finde ich nicht.
Größe ist nunmal relativ subjektiv.
Ja. (Und?)
Du kannst übrigens gerne auf "hilfreich" klicken,
Nein, das kann ich nicht.
Das kannst du schon. Du könntest höchstens nicht wollen. Dann darfst
du dich aber nicht darüber beklagen, daß andere, die das Posting als
nicht hilfreich empfinden bzgl. der Archivierung "gewinnen".
Es ist also im Allgemeinem günstiger zu prüfen, ob sich der Bedarf etwas einschränken läßt, wie Du auch ganz richtig erwähnt hast.
Wo hat er das erwähnt? Hätte er das erwähnt, hätte ich wohl nicht
auf "nicht hilfreich" geklickt.Vieleicht willst Du auch Aufzählungen und Listen entsprechend markieren...
Ich habe das dahingehend interpretiert.
Vielleicht bin ich aber auch zu rücksichtsvoll.
Im Kontext spricht er von Zeilenumbrüchen. Mir ist nicht bekannt, wie
man mit Zeilenumbrüchen etwas markieren kann. Oder wie man überhaupt
etwas in HTML-Code für die späteren Verarbeitung markieren kann oder
wie auch immer.
Für einen Anfänger, dem sogar die grundlegende Idee fehlt, ist dieser
einzelne Satz, der _vielleicht_ das hätte meinen können, was du
später nochmal ausdrücklich beschreibst, und der noch dazu in einem
fehlerhaften oder zumindest verwirrenden Kontext steht, absolut
'zweckfrei', wie du oben so schön schriebst...
Daher meine Bewertung. Aber das schrieb ich ja bereits...
Gruß
Slyh
Moin!
Wäre es nicht angemessener, man vergisst den wahrhaft micronesischen Anlass statt sich "angepisst" zu fühlen und konzentriert sich ein wenig darauf dem OP zu helfen?
Sonst triftet der ganze Thread ins "nicht hilfreiche" ab.
Ja. Ich weiss. Gelingt mir auch nicht immer. Also können wir jetzt?
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Moin!
Ich schlage also vor etwa hier weiterzumachen.
THX!
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
puts "Hallo " + gets.chomp + "."
?> fastix®
=> Hallo fastix®.
Ein kleiner Test (dieser Threadteil ist sowieso wenig relevant).
Einen schönen Freitag noch.
Gruß, Ashura
puts "Hallo " + gets.chomp + "."
?>
=> Hallo.
Ein kleiner Test (dieser Threadteil ist sowieso wenig relevant).
Funktioniert wie erwartet. Sehr schön.
Einen schönen Freitag noch.
Gruß, Ashura
Na schon geschrieben ich führe es lokal von Ecpilse aus aus und ich habe bereits try catch Anweisungen geschrieben. Bei einer http-Adresse erscheint der Text des Files, gebe ich jedoch eine lokale file-Adresse an passiert rein gar nix.
mfg
Torsten
Hi,
ich finde es ja sehr respektabel, das Du Dich zu erkennen gibst, wenn auch Anonym,
Anonym? Ich?
Ja, wer denn sonst? Gibt's hier etwas noch andere Slyh Slyh@gmx.de?
Ich glaube ich bin hier ähnlich anonym wie Cheatah oder
Christian Kruse.
Das mag sein. Aber auch Anonym?
Kleinigkeit? Finde ich nicht.
Größe ist nunmal relativ subjektiv.
Ja. (Und?)
Ja, genau das wollte ich damit zum Ausdruck gebracht haben.
Du kannst übrigens gerne auf "hilfreich" klicken,
Nein, das kann ich nicht.
Das kannst du schon.
Ja, da hast Du natürlich Recht, ich kann auf "hilfreich" klicken. Der Effekt geht aber gegen Null, wenn man mal von einem leichtem Krampf im M. flexor digitorum profundus absieht.
Im Kontext spricht er von Zeilenumbrüchen. Mir ist nicht bekannt, wie
man mit Zeilenumbrüchen etwas markieren kann. Oder wie man überhaupt
etwas in HTML-Code für die späteren Verarbeitung markieren kann oder
wie auch immer.
Das Dir etwas nicht bekannt heißt noch lange nicht, das es das nicht gibt.
so short
Christoph Zurnieden
Hallo.
Ein Klick auf "nicht hilfreich" hat selten etwas mit persönlichen
Präferenzen der Person gegenüber zu tun und sollte es auch nicht haben.
Mir fällt da aber auch ein Besucher dieses Forums ein, dessen Beiträge fast prinzipiell als nicht hilfreich bewertet werden.
MfG, at
Hi
ich bin mir nicht sicher ob mein Thema in dieses Forum passt, aber ich versuch es einfach mal.
Dafür sind wir da...
Ich bin noch ein Java-Anfänger und soll mit einem Java Programm bestimmte Daten (Textstellen) aus einem HTML-File raussuchen.
Also nur Text? So wie das Text-Browser (z.B. Lynx) machen?
Jeoch hab ich keine Ahnung wie ich ein HTML-Dokument was zig Zeilen lang ist struktieriert durchsuchen soll.
Ja, das ist schwer, vor allem, wenn da noch so etwas wie JS oder CSS drin ist...
Es gibt ja schon diverse HTML-Scanner, aber die scheinen auch alle nicht zu funktionieren.
Komischerweise muss es aber gehen, denn Lynx schafft es ja auch.
Hat hier jemand schon mal so was ähnliches gemacht und kann mir weiterhelfen wie ich da am besten ranngehe?
Eins vorweg - ich habe keine Ahnung von Java, aber ich kann dir evtl die Vorgehensweise sagen. Ich bitte hierbei dann auch um Verbesserung...
Nun ja, da du nur Text haben möchtest, würde ich zuerst einmal das HTML-Dokument einlesen, alle HTML-Tags entfernen. Hierbei kommt schon das erste Problem auf, denn was ist mit <script></script> und <style></style>? Da drin sind Sachen, die sich nicht so leicht (evtl sogar gar nicht) von reinem Text untercheiden lassen. Deshalb muss das gleich von vorne herein gelöst werden, ein neuer Ansatz muss her:
1. Zuerst löscht du alles was zwischen <head>...</head> und </head>...</body> drin ist, damit wären alle Skripts und Stylesheets entfernt, denn die befinden sich (fast!) immer im <head> oder zwischen </head> und <body>.
2. Dann löscht du die restlichen HTML-Tags. Dabei solltest du dem JAVA-Programm nicht alle HTML-Elemente einprogrammieren, eher schon zuerst alles zwischen < > löschen, und dann die beiden Klammern selber löschen (wie fastix schon beschrieben hat).
Es kann aber vorkommen, dass eben < > als Text vorkommt und nicht als Entity geschrieben wurde. Deshalb sollten es schon valide HTML-Seiten sein, die du Scannen willst.
Den Vorteil, den diese Vorgehensweise eindeutig hat, ist, dass wirklich NUR der Text ausgegeben werden kann, und keine HTML-Elemente drin sind.
Der große Nachteil, ist, dass weder Anordnung (sei es mit Tabellen oder CSS) nicht berücksichtigt wird. Du bekommst also nur den Text, so wie er im HTML-Dokument aufgeführt ist, untereinander ausgegeben (Was aber auch wieder als Vorteil gewertet werden kann).
Ein Problem gäbe es aber noch: Entities! Zum Schluss wirst du (bei validen Seiten) kein ä, ö, ü oder ß sehen, sondern ä, ö, ü und ß. Ob du das willst, bleibt dir überlassen. Es gibt hunderte solcher Entities, und wenn du sie alle deinem JAVA-Programm einprogrammieren willst, dann mach das, aber es wird eine Riesenarbeit.
Soweit wäre das meine Vorgehensweise. Natürlich ist sie nicht ganz Wasserdicht, aber ich bin offen für Verbesserungen (und bitte gebt mir keine unbegründeten nicht-hilfreich-Punkte, sonst weiß ich nicht, was falsch war an meiner Vorgehensweise).
Mulder
puts "Hallo " + gets.chomp + "."
?> Mulder
=> Hallo Mulder.
- Zuerst löscht du alles was zwischen <head>...</head> und </head>...</body> drin ist,
Ich vermute, dass du dich hier verschrieben hast, denn so würde lediglich folgendes übrig bleiben: <html></html>
damit wären alle Skripts und Stylesheets entfernt, denn die befinden sich (fast!) immer im <head> oder zwischen </head> und <body>.
Zwischen <head> und <body> haben Skripte nichts verloren. Entweder im Kopf oder im Körper, dazwischen gibt es nicht. (Willst du jedoch auf fehlerhafte Seiten eingehen, musst du damit rechnen, das stimmt allerdings.)
Ein Problem gäbe es aber noch: Entities! Zum Schluss wirst du (bei validen Seiten) kein ä, ö, ü oder ß sehen, sondern ä, ö, ü und ß.
So ein Unsinn. In meinen Seiten gibt es nahezu keine einzige Zeichenreferenz. Ich schreibe sämtliche Umlaute und Sonderzeichen direkt in den Quelltext und fahre gut damit.
Benke: die Zeichenkodierung hat nichts mit der Validität zu tun.
Siehe dazu auch [Wikipedia: Unicode] und zu der von mir gewählten Kodierung [Wikipedia: UTF-8]
(und bitte gebt mir keine unbegründeten nicht-hilfreich-Punkte, sonst weiß ich nicht, was falsch war an meiner Vorgehensweise).
Keine Sorge, das gibt es zumindest von mir nur, wenn ein Posting keine Antwort wert ist.
Einen schönen Donnerstag noch.
Gruß, Ashura
Na zum Glück gibt es in den Files die ich durchsuchen muß kein JS oder StyeSheet.
Was die Sache für mich momentan nicht gerade einfacher gestaltet.
Aber Danke für die Hilfe!
Werde mich da morgen weiter ransetzen.
MFG
Torsten
Hi,
- Zuerst löscht du alles was zwischen <head>...</head> und </head>...</body> drin ist, damit wären alle Skripts und Stylesheets entfernt, denn die befinden sich (fast!) immer im <head> oder zwischen </head> und <body>.
Was ist eigentlich mit dem Problem, das je nach Spezifikation nicht unbedingt ein HEAD-Element vorhanden sein muß? Oder ein BODY-Element? Oder gar das HTML-Rootelement? Sie können auch nur teilweise vorhanden sein. Das hier ist z.B. valides HTML-4.01-transitional:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/loose.dtd">
Hello World
Es braucht nicht viel, was? ;-)
(Etwas unsicher bin ich darüber, ob es nicht zumindest ein einleitendes <html> benötigt)
Es kann aber vorkommen, dass eben < > als Text vorkommt und nicht als Entity geschrieben wurde. Deshalb sollten es schon valide HTML-Seiten sein, die du Scannen willst.
Das '>' ist hier schon evt zuviel, muß je nach Standard nicht als Entity geschrieben werden.
Ein Problem gäbe es aber noch: Entities! Zum Schluss wirst du (bei validen Seiten) kein ä, ö, ü oder ß sehen, sondern ä, ö, ü und ß. Ob du das willst, bleibt dir überlassen. Es gibt hunderte solcher Entities, und wenn du sie alle deinem JAVA-Programm einprogrammieren willst, dann mach das, aber es wird eine Riesenarbeit.
Die benamsten lassen sich aus der DTD ziehen, ist kein Problem und die restlichen per Algorithmus umsetzen. Das sind ein paar Zeilen Perl und noch ein paar Zeilen Java für den Algorithmus.
so short
Christoph Zurnieden
Hi Christoph,
Was ist eigentlich mit dem Problem, das je nach Spezifikation nicht unbedingt ein HEAD-Element vorhanden sein muß?
Doch, das head-Element ist immer vorhanden
Oder ein BODY-Element?
Auch das.
Oder gar das HTML-Rootelement?
Auch das.
Sie können auch nur teilweise vorhanden sein.
Äh, wie das? Halbe Elemente gibt’s nicht.
(Etwas unsicher bin ich darüber, ob es nicht zumindest ein einleitendes <html> benötigt)
Nein, wird nicht benötigt:
<!ELEMENT HTML O O (%html.content;) -- document root element -->
<!ENTITY % html.content "HEAD, BODY">
<!ELEMENT HEAD O O (%head.content;) +(%head.misc;) -- document head -->
<!ELEMENT BODY O O (%block;|SCRIPT)+ +(INS|DEL) -- document body -->
Gruß,
Gunnar
Hi,
Was ist eigentlich mit dem Problem, das je nach Spezifikation nicht unbedingt ein HEAD-Element vorhanden sein muß?
Doch, das head-Element ist immer vorhanden
Ja, aber unten hast Du doch selber zitiert ... ach, veräppeln will er mich und ich merk's noch nicht einmal! Touche! ;-)
Eigentlich sollte ich ja jetzt mal nachschauen, ob das im modularem XHTML 2 immer noch stimmt, aber da bin ich jetzt zu faul zu.
(Etwas unsicher bin ich darüber, ob es nicht zumindest ein einleitendes <html> benötigt)
Nein, wird nicht benötigt:
<!ELEMENT HTML O O (%html.content;) -- document root element -->
Tja, wer ganz nach unten scrollt ist klar im Vorteil ;-)
Danke.
so short
Christoph Zurnieden
Hi Christoph,
Was ist eigentlich mit dem Problem, das je nach Spezifikation nicht unbedingt ein HEAD-Element vorhanden sein muß?
Doch, das head-Element ist immer vorhanden
[…] ach, veräppeln will er mich […]
Äh, nein. Wieso?
Ich wollte dich nur auf den Unterschied zwischen Element und Tag hinweisen. (http://jendryschik.de/wsdev/einfuehrung/xhtml/syntax)
Die Elemente html, head, body sind da, auch wenn es die Tags nicht sind. Wie auch in HTML 4.01 jede table einen tbody enthält.
Gruß,
Gunnar
Hi,
[…] ach, veräppeln will er mich […]
Äh, nein. Wieso?
Ich wollte dich nur auf den Unterschied zwischen Element und Tag hinweisen.
Ja, genau so habe ich das auch verstanden, d'rum auch das "Touche!"
(und wenn mir jetzt noch einer sagt, welcher Accent auf's 'e' kommt wär' ich noch glücklicher ;-)
so short
Christoph Zurnieden
Hi Christoph,
"Touche!"
(und wenn mir jetzt noch einer sagt, welcher Accent auf's 'e' kommt wär' ich noch glücklicher ;-)
Touché von © TOM, taz, TomTunnel
Gruß,
Gunnar
Hi
(und wenn mir jetzt noch einer sagt, welcher Accent auf's 'e' kommt wär' ich noch glücklicher ;-)
Akzent in Schreibrichtung: lange Aussprache
Akzent gegen Schreibrichung: kurze Aussprache
Also:
Touché!
(Bin ziemlich gut in Französisch :-] )
andy
Hallo.
(Bin ziemlich gut in Französisch :-] )
Dafür kann ich griechisch und chinesisch essen.
MfG, at
你好 at,
(Bin ziemlich gut in Französisch :-] )
Dafür kann ich griechisch und chinesisch essen.
Ich hab auch schonmal koreanisch geschafft.
再见,
克里斯蒂安
Hallo.
Dafür kann ich griechisch und chinesisch essen.
Ich hab auch schonmal koreanisch geschafft.
Respekt! Dafür reicht mein Talent einfach nicht.
MfG, at
Moin
Akzent in Schreibrichtung: lange Aussprache
Akzent gegen Schreibrichung: kurze Aussprache
Das ist Schwachsinn, der Akzent hat mit der Länge der Aussprache nix zu tun, wohl aber mit der Art der Aussprache.
(Bin ziemlich gut in Französisch :-] )
No Comment... ;-)
Liebe Grüsse
Christoph
Hallo.
Akzent in Schreibrichtung: lange Aussprache
Akzent gegen Schreibrichung: kurze AusspracheDas ist Schwachsinn
Das ist kein Schwachsinn, sondern eine auf ein verständliches Maß verkürzte Darstellung des korrekten Sachverhaltes.
MfG, at
Hallo,
Ich bin noch ein Java-Anfänger und soll mit einem Java Programm bestimmte Daten (Textstellen) aus einem HTML-File raussuchen.
Wenn du genau weißt wie die HTML-Datei aussieht und wenn diese sich
in der Zeit, in der dein Programm eingesetzt werden soll, nicht stark
ändern wird, kannst du sicher etwas über String-Vergleiche machen, wie
hier im Thread ja bereits angesprochen wurde.
Wenn man nicht garantieren kann, daß die HTML-Datei immer gleich bleibt
oder mehrere HTML-Dateien mit verschiedener Struktur bearbeitet werden
sollen, macht ein String-Vergleich nur wenig Sinn. (Von <script>-Bereichen,
Kommentaren, Literalen usw. möchte ich gar nicht erst anfangen.)
Verwende stattdessen einen Parser, der entweder Event-gesteuert ist oder
der dir einen DOM-Baum baut. Hier wird die HTML-Datei nach einer
Grammatik eingelesen und dir zugänglich gemacht. Im Falle einer
Event-gesteuerten Parsers wird bspw. für jedes öffnende Tag eine
Methode aufgerufen, in der die abfragen kannst, ob das Tag die von
dir geforderten Eigenschaften ("<table>", "<tr>", "<td>") hat. Du
kannst dir dann den aktuellen Zustand ("Ich bin gerade in dem 5. <tr>
der 3. Tabelle im Dokument") merken. Du kannst dir aber auch einen
einfachen DOM-Baum daraus generieren, den du anschließend abarbeitest,
z.B. indem du ihn durchläufst, nach <table>-Tags suchst, darin nach
<tr>-Tags und darin wiederum nach <td>-Tags, die dann den von dir
gewünschten Text enhalten.
Ein Parser für HTML ist in Java seit Version 1.2 eingebaut. Der
unterstützt meines Wissens HTML 3.2. Das sollte in der Regel aber
ausreichend sein. Wie empfindlich der Parser bei invalidem HTML-
Code ist, weiß ich leider nicht. Aber schau mal in das Package
javax.swing.text.html.
Zwei Beispiele wie man mit Java ein HTML-Dokument parst, findest du
im Java-Almanac unter http://javaalmanac.com/egs/javax.swing.text.html/pkg.html.
Wenn das nichts taugt, kannst du bspw. auch mal nach JavaCC
schauen. Das enthält eine HTML-Grammatik. (JavaCC ist aber sehr
empfindlich bei invalidem Code.)
Ansonten habe ich auf die Schnelle noch http://jerichohtml.sourceforge.net/
gefunden. Klingt so, als tauge das was...
Außer in Spezialfällen würde ich von direkten String-Vergleichen
vehement abraten.
Gruß
Slyh
Hallo,
ich habe mir das Beispiel mal angeschaut und wollte es ausprobieren, wenn ich eine Seite aus dem Internet nehme funktioniert das auch supi, aber wenn ich eine Seite lokal auf der Platte abspeichere wie es dann auch bei meinen zu bearbeitenden Seiten der Fall sein wird funktioniert das nicht, es gibt keinerlei Output :-(.
Woran kann das liegen?
http://javaalmanac.com/egs/javax.swing.text.html/pkg.html.
MFG
Torsten
kann es sein das der quelltext dieser seite nur url bearbeiten kann aber keine uri?
was müßte ich ändern das er auch uri bearbeitet?
mfg
torsten
puts "Hallo " + gets.chomp + "."
?> Torsten
=> Hallo Torsten.
kann es sein das der quelltext dieser seite nur url bearbeiten kann aber keine uri?
Wenn er einen URL verarbeiten kann, kann er dies ebenso für URI, da URL ein Teilbereich des URI ist.
Siehe dazu: http://www.techfak.uni-bielefeld.de/~joern/UR_script/
Einen schönen Freitag noch.
Gruß, Ashura
hm, wieso geht das dann nicht?
mit "http://www.web.de" gehts,
aber mit "file://c:/test.html" gehts nicht?
wo liegt da der fehler?
mfg
torsten
Moin!
hm, wieso geht das dann nicht?
mit "http://www.web.de" gehts,
aber mit "file://c:/test.html" gehts nicht?
wo liegt da der fehler?
"geht nicht" ist keine Fehlermeldung.
Fange den Fehler ab (use: try {...} catch {...}).
Wie führst Du denn Dein Programm aus? Als Applet? Was würde geschehen, wenn ein Applet(aus dem Web...) auf das lokale Dateisystem zugreifen dürfte? Genau. Jeder Webmaster könnte sich erstmal Deine user.dat herunterladen...
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
ich führe das progamm aus eclipse aus als reine ava-anwendung. und es geht nicht bedeutet das kein output kommt. keine einzige zeile.
Moin!
ich führe das progamm aus eclipse aus als reine ava-anwendung. Und es geht nicht bedeutet das kein output kommt. keine einzige zeile.
Hm. Versuche es mal am Prompt. Ich kann leider nicht sagen, wie man in Eclipse an die Fehlermeldungen rankommt.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Es kommt keine fehlermeldung,
ich poste mal den code von mir...
public class TestScanner
{
// // This method takes a URI which can be either a filename (e.g. file://c:/dir/file.html)
// or a URL (e.g. http://host.com/page.html) and returns all text in the document.
public static String getText(String uriStr) {
final StringBuffer buf = new StringBuffer(1000);
try {
// Create an HTML document that appends all text to buf
HTMLDocument doc = new HTMLDocument() {
public HTMLEditorKit.ParserCallback getReader(int pos) {
return new HTMLEditorKit.ParserCallback() {
// This method is whenever text is encountered in the HTML file
public void handleText(char[] data, int pos) {
buf.append(data);
buf.append('\n');
}
};
}
};
// Create a reader on the HTML content
URL url = new URI(uriStr).toURL();
//System.out.println(url);
//System.out.print(uriStr);
URLConnection conn = url.openConnection();
Reader rd = new InputStreamReader(conn.getInputStream());
//Reader rde = new BufferedReader(new FileReader(uriStr));
// Parse the HTML
EditorKit kit = new HTMLEditorKit();
kit.read(rde, doc, 0);
} catch (MalformedURLException e) {
//} catch (URISyntaxException e) {
} catch (BadLocationException e) {
} catch (IOException e) {
}
// Return the text
return buf.toString();
}
public static void main ( String[] args ) throws IOException
{
String link = "file://C:/test.html";
String outfile = getText(link);
System.out.print(outfile);
}
}
MFg Torsten
also, geändert müßte noch "rde" in "rd" und der catch-block muß wieder rein , das weis ich und ich führe es aus eclipse heraus aus.
Hallo,
ich führe das progamm aus eclipse aus als reine ava-anwendung. und es geht nicht bedeutet das kein output kommt. keine einzige zeile.
Gibst du denn überhaupt was aus?
Poste doch bitte mal den gesamten(!) Code. Und vielleicht auch die HTML-
Datei. Oder stell die HTML-Datei irgendwo online.
Gruß
Slyh
Hallo,
was müßte ich ändern das er auch uri bearbeitet?
Ändere die Methode doch einfach so, daß sie ein File-Objekt entgegen
nimmt. Dann kannst du den folgenden Code ersetzen...
// Create a reader on the HTML content
URL url = new URI(uriStr).toURL();
URLConnection conn = url.openConnection();
Reader rd = new InputStreamReader(conn.getInputStream());
...und zwar durch sowas wie...
Reader rd = new BufferedReader(new FileReader(meineDatei));
(Unkompilierter Code.)
Gruß
Slyh
hm, geht leider auch nicht