Torsten: HTML Scanner

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

  1. 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 &amp; (&) &lt; (<) &quot; ("), &ouml; (ö)  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®

    --
    Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
    1. Hm, danke für die Tips, werde mich da mal im netz kundig machen

      MFG
      Torsten

    2. 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

      1. 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

        1. 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

      2. 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®

        --
        Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
      3. 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

        1. 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

          1. 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

            1. 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®

              --
              Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
              1. Moin!

                Ich schlage also vor etwa hier weiterzumachen.

                THX!

                MFFG (Mit freundlich- friedfertigem Grinsen)

                fastix®

                --
                Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
                1. puts "Hallo " + gets.chomp + "."

                  ?> fastix®
                  => Hallo fastix®.

                  Ein kleiner Test (dieser Threadteil ist sowieso wenig relevant).

                  Einen schönen Freitag noch.

                  Gruß, Ashura

                  --
                  Selfcode: sh:( fo:) ch:? rl:( br:^ n4:& ie:{ mo:) va:) de:> zu:) fl:( ss:| ls:[ js:|
                  30 Days to becoming an Opera8 Lover -- Opera 8.02 mit Bittorent-Unterstützung
                  Meine Browser: Opera 8.01 | Firefox 1.0.4 | Lynx 2.8.3 | Netscape 4.7 | IE 6.0
                  [Deshalb frei! - Argumente pro freie Software]
                  1. 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

                    --
                    Selfcode: sh:( fo:) ch:? rl:( br:^ n4:& ie:{ mo:) va:) de:> zu:) fl:( ss:| ls:[ js:|
                    30 Days to becoming an Opera8 Lover -- Opera 8.02 mit Bittorent-Unterstützung
                    Meine Browser: Opera 8.01 | Firefox 1.0.4 | Lynx 2.8.3 | Netscape 4.7 | IE 6.0
                    [Deshalb frei! - Argumente pro freie Software]
                2. 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

            2. 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

        2. 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

  2. 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 &auml;, &ouml;, &uuml; und &szlig;. 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

    1. puts "Hallo " + gets.chomp + "."

      ?> Mulder
      => Hallo Mulder.

      1. 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 &auml;, &ouml;, &uuml; und &szlig;.

      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

      --
      [remote-signature:http://download.noctus.net/scripts/self_sig.php]
      1. 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

    2. Hi,

      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>.

      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 &auml;, &ouml;, &uuml; und &szlig;. 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

      1. 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

        --
        „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
        1. 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

          1. 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

            --
            „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
            1. 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

              1. 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

                --
                „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
              2. 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

                1. Hallo.

                  (Bin ziemlich gut in Französisch :-] )

                  Dafür kann ich griechisch und chinesisch essen.
                  MfG, at

                  1. 你好 at,

                    (Bin ziemlich gut in Französisch :-] )

                    Dafür kann ich griechisch und chinesisch essen.

                    Ich hab auch schonmal koreanisch geschafft.

                    再见,
                     克里斯蒂安

                    --
                    Ihr wisst nicht, wie man den Menschen dient. Wie sollt ihr wissen, wie man den Goettern dienen soll?
                    http://wwwtech.de/
                    1. 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

                2. 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

                  1. Hallo.

                    Akzent in Schreibrichtung: lange Aussprache
                    Akzent gegen Schreibrichung: kurze Aussprache

                    Das ist Schwachsinn

                    Das ist kein Schwachsinn, sondern eine auf ein verständliches Maß verkürzte Darstellung des korrekten Sachverhaltes.
                    MfG, at

  3. 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

    1. 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

      1. 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

        1. 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

          --
          Selfcode: sh:( fo:) ch:? rl:( br:^ n4:& ie:{ mo:) va:) de:> zu:) fl:( ss:| ls:[ js:|
          30 Days to becoming an Opera8 Lover -- Opera 8.02 mit Bittorent-Unterstützung
          Meine Browser: Opera 8.01 | Firefox 1.0.4 | Lynx 2.8.3 | Netscape 4.7 | IE 6.0
          [Deshalb frei! - Argumente pro freie Software]
          1. 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

            1. 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®

              --
              Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen. 
              1. ich führe das progamm aus eclipse aus als reine ava-anwendung. und es geht nicht bedeutet das kein output kommt. keine einzige zeile.

                1. 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®

                  --
                  Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
                  1. 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

                    1. 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.

                2. 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

        2. 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

          1. hm, geht leider auch nicht