Kleiner HTML Parser (Facharbeit)

Hyte

Mitglied
Hallo,

wie der Titel schon sagt muss ich einen kleinen HTML Parser erstellen.

Er muss nicht vieles überprüfen, da er zur Korrektur der HTML-Seiten des Info-Grundkurses dienen soll.
Sind also nur folgende HTML Tags:

  • Grundgerüst (html, head & body)
  • Meta
  • Title
  • Listen (OL & UL)
  • Links
  • Text-Ausrichtung (align)
  • Grafiken (img src)
  • Text-Eigenschaften (b,u & i)
  • Font

Hier die Testseite:
HTML:
<html>
<head>
<meta name="description" content="html Seite nach der Aufgabenstellung des Grundkurses.">
<meta name="keywords" content="Informatik">
<meta name="author" content="Jakov Greenyer">
<title>Meine Webseite</title>
</head>

<body>
<font size="10" color="purple" face="Courier New, Courier, monospace">
<p><h1>&Uuml;berschrift</h1></p>
<p><a href="www.djhyte.de">Hier</a> geht es zu meiner Seite!</p>
<p>Drei <b>Gr&uuml;nde</b>, warum ihr <u>meine HP</u> besuchen solltet:</p>
<ol>
<li>Gute Musik!</li>
<li>Gute Wallpaper & Flyer!</li>
<li>Mehr Informatiööööönen &uuml;ber mich!</li>
</ol>

<p><img src="http://unterricht.schermann.org/images/a/ac/HTML-Automat.png" alt="HTML Automat">

</font>
</body>
</html>

Egal nun zum Wesentlichen:

Kurz vorweg, ich weiß irgendwie alles nur so halb! =/

Ich habe mir nun überlegt, dass die Schüler die Website als .txt Datei abgeben.
Also habe ich schonmal damit angefangen die Datei in einem String zu speichern:

Java:
	public static void input()
	{
	System.out.println("Text wird Importiert...:");
	
	try
	{
		BufferedReader br =
		new BufferedReader(new FileReader("index.txt"));

		String quellcode = br.readLine();
		while (quellcode != null) 
		{
			System.out.println(quellcode);
			quellcode = br.readLine();
		}				
	}
	
	catch(IOException ioe)
	{
		ioe.printStackTrace();
	}
	
	}

Klappt auch, glaube ich! Zumindest wird er korrekt in der Konsole ausgedruckt.

Jetzt möchte ich wie folgt vorgehen:
Zunächst soll der String nach Umlauten durchsucht werden (ä, ö, ü & ß) und die Anzahl der
Funde, soll für später gespeichert werden.
Anschließend soll jetzt der Text zwischen > und < entfernt werden, damit ich nur noch die
html-Tags habe.

Jetzt mein Problem: ICH HAB 0 AHNUNG wie ich weiter machen soll... bei mir scheitert es immer an Kleinigkeiten glaube ich.

Wie kann ich jetzt den String quellcode weiter benutzen um zB die Umlaute zu zählen?

Ich bin für jede kleine Hilfestellung dankbar!
 
G

Gast2

Gast
In deiner Variable quellcode wirst du immer nur die letzte Zeile der Datei haben.
Es muss heißen:
Java:
quellcode += br.readLine();
(aber nutze dort lieber einen StringBuilder!)

Um die Umlaute zu zählen kannst du mit einer Schleife über den gesamten String gehen und schauen ob an Position x ein Umlaut ist, dann erhöhst du einen Counter.
Das entfernen aller zeichen zwischen > und < kannst du auch ähnlich machen. Oder du nutzt dafür RegEx.

EDIT:
falsch korrigiert :p
 
Zuletzt bearbeitet von einem Moderator:

hierUndDa

Mitglied
Du könntest auch von Anfang an gleich nur die Tags auslesen.

ACHTUNG: Der Code-Auschnitt hat noch einige Maken, z.B. muss 'korrekter' html-code eingegeben werden, da ansonsten die while-schleife endlos wird. Auch werden die ä, ö, etc. nicht gezählt.

Java:
        BufferedReader br =
        new BufferedReader(new FileReader("index.txt"));
 
        
		ArrayList<String> tags = new ArrayList<String>();
        
		int read = br.read();
		System.out.println((char) read);
		
		while (read != -1)
        {
            if ((char) read == '<') {
            	StringBuffer tag = new StringBuffer();
            	while ((char) read != '>') {
            		tag.append((char) read);
            		read = br.read();
            		System.out.println((char) read);
            	}
            	tag.append((char) read);
            	tags.add(tag.toString());
            }
            read = br.read();
    		System.out.println((char) read);
        }
        
        for (String tag: tags) {
        	System.out.println(tag);
        }
 

Hyte

Mitglied
Denn String hab ich mir jetzt mit "concat" erstellt.
Einfach einen zusätzlichen "input" String erstellt und dann:

Java:
 while (quellcode != null) 
	  {
	   input=input.concat(quellcode);
	   quellcode = br.readLine();
	  }

Das war es wonach ich die ganze Zeit gesucht hatte!

Dass die Umlaute in dem Code nicht gesucht werden ist logisch, war ja noch nicht so weit!

Mache das jetzt so:

Java:
private int zaehleOe()
	{
		int oe=0;
	    for (int i = 0; i < input.length(); i++)
	    {
	        if(input.charAt(i) == 'ö')
	            oe++;
	        
	    }
		return oe;
	}

In einer anderen Methode überprüfe ich anschließend ob und welche Umlaute vorhanden sind
um diese anschließend in der Auswertung anzugeben.

Danke für die Hilfe ;)
Jetzt mach ich mich daran den "nackten Text" zu löschen!

P.S.: Ich könnte auch einfach mit deinem Code nochmal ohne Text auslesen. Ist glaube ich jetzt etwas schneller! =) Vielen Dank!
 
Zuletzt bearbeitet:

hierUndDa

Mitglied
Java:
input=input.concat(quellcode);

ist das gleiche wie

Java:
input = input + quellcode;

oder

Java:
input += quellcode;

PS: Hab gemeint, dass mein Code die Umlaute noch nicht zählt. :)
 
Zuletzt bearbeitet:

tagedieb

Top Contributor
Zum analysieren von HTML Seiten koennte auch das HttpUnit Framework nuetzlich sein. Damit lassen sich ganz einfach Links, Bilder, CSS und alle uebrigen HTML Elemente auslesen.

Ich weiss nicht ob dir das weiterhilft, aber wolle es zur Ergaenzung hier reinstellen.
 

faetzminator

Gesperrter Benutzer
Fiese Frage, aber warum stellst du hier Anfängerfragen zu deiner Facharbeit? Wenn ein Wirtschaftsinformatikstudent nicht programmieren kann, dann ist das mir eigentlich egal. Aber ein Informatiker, welcher bei seiner FA grundlegende Sachen nicht erledigen kann (bzw. allenfalls sogar dafür betrügt)...!? Oder versteh ich das Wort FA falsch?
 
G

Gastredner

Gast
Klingt eher nach der schulischen Facharbeit, die man in der Oberstufe schreibt (daher wohl auch der "Info-Grundkurs").
 

Hyte

Mitglied
Ja, das ist eine Facharbeit für meinen Leistungskurs.
Neben einer Klausur muss ich auch eine Facharbeit schreiben.

Leider habe ich viel im Unterricht verpasst und habe nun einige Lücken!
Aber es geht schon sehr gut voran. Vielen Dank nochmal!

Allerdings habe ich noch eine Kleinigkeit:

Java:
private int zaehleOe()
    {
        int oe=0;
        for (int i = 0; i < input.length(); i++)
        {
            if(input.charAt(i) == 'ö')
                oe++;
            
        }
        return oe;
    }

Ich habe jetzt für jedes Umlaut (ä,ö,ü & ß), solch eine private int Methode.
Es gibt doch 100% die Möglichkeit, alle 4 Umlaute auf eine Methode zu beschränken,
oder nicht? Ansonsten lasse ich das jetzt einfach so.
 
G

Gast2

Gast
Java:
private int zaehleChar(char c)
    {
        int count=0;
        for (int i = 0; i < input.length(); i++)
        {
            if(input.charAt(i) == c)
                count++;
            
        }
        return count;
    }
Dann rufste das einfach für alle chars auf die du zählen willst
 

hierUndDa

Mitglied
Ich mag das:

Initialisieren:
Java:
HashMap<Character, Integer> counter = new HashMap<Character, Integer>();

public HTMLParser() {
	initHashMap(new char[] { 'ä', 'ö', 'ü', 'ß'});
}

private void initHashMap(char[] charsToCount) {
	for (int i = 0; i<charsToCount.length; i++) {
		counter.put(charsToCount[i], 0);
	}
}

Einzelne char testen:
Java:
private void countSpecialCharacters(char key) {
	if (counter.containsKey(key)) {
		counter.put(key,  counter.get(key)+1);
	}
}

Ausgeben:
Java:
public void printUmlaute() {
	for(Character key: counter.keySet()) {
       	System.out.println(key + ": " + counter.get(key));
        }
}
 

Pommes9485

Bekanntes Mitglied
Du zählst die Umlaute doch nur, um sie später zu ersetzten oder ?
Dann würde ich es einfacher machen :
Java:
deinString = deinString.replaceAll("oe", "der html code dafür,kenne ich nicht")
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Kleiner Downloader Allgemeine Java-Themen 3
vandread Problem bei kleiner Thread-Übung Allgemeine Java-Themen 2
S Kleiner Texteditor mit MD5-Check Allgemeine Java-Themen 4
Landei Kleiner UPN-Rechner für BigIntegers Allgemeine Java-Themen 5
-MacNuke- [NumberFormat] Prozente kleiner 1% Allgemeine Java-Themen 11
chik Doppelt verkettete Liste bzw. Zirkulärliste (kleiner Fehler, den ich nicht finde) Allgemeine Java-Themen 4
G JRE: Minimale Systemanforderungen kleiner als 64 MB? Allgemeine Java-Themen 6
S Bookmark HTML Datei einlesen, alle Links erhalten und manche editieren..? (aktuell JSoup) Allgemeine Java-Themen 4
S HTML einer Webseite 1:1 so bekommen wie es auch der Browser anzeigt? Allgemeine Java-Themen 14
C Parsen einer sich updatenden Html mithilfe von jsoup Allgemeine Java-Themen 4
I HTML / XHTML Seite nach Excel exportieren. Suche Lib Allgemeine Java-Themen 12
F Kennt ihr eine Library um 2 HTML Seiten zu diffen? Allgemeine Java-Themen 8
K HTMLEditor HTML Text in Rich Text umwandeln Allgemeine Java-Themen 14
N Value Wert aus HTML-Button mittels thymeleaf spring an java übergeben Allgemeine Java-Themen 2
N Lottowebsite programmieren mittels Java, HTML,.... Allgemeine Java-Themen 7
S HTML den ich von einer URL hole nicht identisch mit dem HTML im Browser Allgemeine Java-Themen 1
M Html Seite auslesen Allgemeine Java-Themen 16
Developer_X Website HTML Code von HTTPS URL laden Allgemeine Java-Themen 0
L HTML Formular ausführen Allgemeine Java-Themen 1
J Auslesen Daten Java/HTML Allgemeine Java-Themen 15
A Applet in HTML einbinden Allgemeine Java-Themen 1
KeVoZ_ JSoup - HTML Tag entfernen Allgemeine Java-Themen 1
I HTML einer Website auslesen liefert nur head Allgemeine Java-Themen 6
perlenfischer1984 HTML Code decodieren Allgemeine Java-Themen 2
stylegangsta Mehrere html seiten einer Homepage einlesen und als Textdatei ausgeben Allgemeine Java-Themen 14
P HTML Text bearbeiten Allgemeine Java-Themen 1
A Probleme beim auslesen von Quelltext (HTML) Allgemeine Java-Themen 5
OnDemand String aus html einlesen Allgemeine Java-Themen 2
OnDemand Substring einer HTML Seite will nicht Allgemeine Java-Themen 5
S Applet in html laden; InvocationTargetException,.. nur warum ? Allgemeine Java-Themen 0
R HTML Tabelle durchsuchen Allgemeine Java-Themen 3
L Erste Schritte Eclipse und Lokal funktioniert - in HTML nicht! Allgemeine Java-Themen 2
T Keyword Highlighting in HTML Allgemeine Java-Themen 5
B Best Practice HTML Output Optimal implementieren Allgemeine Java-Themen 3
A jEditorPane Html Datei öffnen (code) Allgemeine Java-Themen 3
Y Applet/Html - Wie Java-Methode aufrufen, die einen Parameter erwartet? Allgemeine Java-Themen 3
H HTML Parsing errors Allgemeine Java-Themen 9
P Aktuellen HTML Code auslesen (von JS manipuliert) Allgemeine Java-Themen 3
M HTML-Code von Webseite über Browser oder Console auslesen?? Allgemeine Java-Themen 5
S Robuste Methode um Text von HTML code zu extrahieren..? Allgemeine Java-Themen 6
S Bekomme mit Scanner und URL keine Html-Seite ausgelesen Allgemeine Java-Themen 3
C JEditorPane langsam großes HTML Allgemeine Java-Themen 8
M html aus aktuellem Browserfenster mitlesen lassen Allgemeine Java-Themen 5
T Kann HTML Datei nicht lesen Allgemeine Java-Themen 3
S HTML-Quelltext nach bestimmter Stelle durchsuchen Allgemeine Java-Themen 2
B HTML Tags in Strings umwandeln Allgemeine Java-Themen 4
S BufferedReader/PrintWriter an einer HTML Allgemeine Java-Themen 6
T HTML Tag Position mittels Pattern ermitteln Allgemeine Java-Themen 7
C Attribute aus HTML Tags auslesen Allgemeine Java-Themen 6
M Wicket Html Allgemeine Java-Themen 2
S Fehler beim ausführen des HTML Allgemeine Java-Themen 7
S Fehler Applet-HTML Allgemeine Java-Themen 5
B suchfunktion in html integrieren Allgemeine Java-Themen 3
DEvent Wieso ist Javadoc mit Html Tags? Allgemeine Java-Themen 47
P RegEx mit HTML Parser für Java möglich? Allgemeine Java-Themen 10
B RTF zu HTML Allgemeine Java-Themen 3
S Von HTML-Seite den Titel bekommen Allgemeine Java-Themen 2
M .jar in HTML einbinden Allgemeine Java-Themen 5
K iText, HTML Einrückung im Document, aber nicht im Paragraph Allgemeine Java-Themen 3
J Überprüfen ob URL eine HTML Datei referenziert Allgemeine Java-Themen 4
E Zeilenumbruch html Allgemeine Java-Themen 3
J URLs aus HTML Datei extrahieren Allgemeine Java-Themen 2
G Swing JEditorPaneAppender (Output im HTML-Format) Allgemeine Java-Themen 12
W Java Anwendung in HTML Allgemeine Java-Themen 2
M Html Unit Whitespace-Problem Allgemeine Java-Themen 4
J HTML-Sonderzeichen ersetzen Allgemeine Java-Themen 2
M HTML-Websiten verarbeiten Allgemeine Java-Themen 8
A Index Datei aus HTML-Dateien Allgemeine Java-Themen 7
S HTML => DOM - Welcher Parser für meine Zwecke? Allgemeine Java-Themen 3
I HTML Seite laden Allgemeine Java-Themen 6
W Saubere Lösung für das Auslesen einer Html Seite (Mehrsprachigkeit) Allgemeine Java-Themen 5
M String in Html Text umwandeln Allgemeine Java-Themen 2
S Formatierungen aus HTML-Dokument übernehmen und in Word docx schreiben Allgemeine Java-Themen 3
E HTML File mit Umlaute einlesen Allgemeine Java-Themen 8
T HTML Parser Allgemeine Java-Themen 7
E Regex HTML Tag und Inhalt löschen Allgemeine Java-Themen 4
S Swing mit JEditorPane per HTML auf Bilder in JAR zugreifen. Allgemeine Java-Themen 3
S Regulärer Ausdruck für HTML-Tag Allgemeine Java-Themen 18
H Java Methode zum HTML encodieren/decodieren Allgemeine Java-Themen 2
Daniel_L Bug in Copy-Funktion bei HTML-Editorpane? Allgemeine Java-Themen 4
M JApplet einbinden in HTML Allgemeine Java-Themen 19
F Problem mit regulären Ausdruck in Zusammenhang mit HTML Allgemeine Java-Themen 8
T JavaScript aus HTML im JEditorPane ausführen? Allgemeine Java-Themen 5
S PDF nach HTML oder XML Allgemeine Java-Themen 2
O Tastendrücke in verstecktes HTML-Formular schreiben Allgemeine Java-Themen 4
D Strings von HTML befreien Allgemeine Java-Themen 17
A HTML-Seite aufrufen, drucken und zum Programm zurückkehren Allgemeine Java-Themen 2
E Html tags entfernen optimieren Allgemeine Java-Themen 12
Q API zum Verarbeiten von HTML Allgemeine Java-Themen 4
DerEisteeTrinker PDF mit seiner Formatierung in HTML umwandeln Allgemeine Java-Themen 15
B Java in HTML stellen Allgemeine Java-Themen 11
M id aus HTML (Regex) Allgemeine Java-Themen 7
D HTML mit Java verknüpfen Allgemeine Java-Themen 2
W HTML-Pfad Allgemeine Java-Themen 4
G HTML-Datei einlesen, Plain Text in Textfile speichern Allgemeine Java-Themen 4
A HTML-Seite wieder schließen Allgemeine Java-Themen 2
E JTidy html "hidden" Button drücken Allgemeine Java-Themen 7
faetzminator Regex zur Suche von "value-losen" Attributen in HTML Tags Allgemeine Java-Themen 7
data89 Java und HTML-Seiten mit Bildern - Wie passt das zusammen? Allgemeine Java-Themen 2
C Applet: JFileChooser: PFad an HTML zürückgeben Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben