HTML Table enelsen

encaladus

Grünschnabel
Ich würde gerne die TD-Tags aus einer HTML Datei auslesen, da zu habe ich bis jetzt folgen Code
Code:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
 
import javax.swing.text.html.HTML;
import javax.swing.text.html.HTMLDocument;
import javax.swing.text.html.HTMLEditorKit;

public class NotenRechner {
  public static void main(String[] args) throws Exception{
    int length = 0;
       URL url = new URL("file:C:/Users/Slevin/Desktop/Notenspiegel.html");
       URLConnection con = url.openConnection();
   
       BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
       HTMLEditorKit editorKit = new HTMLEditorKit();
       HTMLDocument htmlDoc = new HTMLDocument();
       htmlDoc.putProperty("IgnoreCharsetDirective", Boolean.TRUE);
       editorKit.read(br, htmlDoc, 0);
   
       HTMLDocument.Iterator iter = htmlDoc.getIterator(HTML.Tag.TD);
       while (iter.isValid()) {
        length = iter.getEndOffset()-iter.getStartOffset(); 
        System.out.println(htmlDoc.getText(iter.getStartOffset(), length));
        iter.next();
      }
   }
}

Allerdings schmeisst er mir ne NullPointerException
und zwar bei
Code:
 while (iter.isValid()) {
verstehe das Problem absolut nicht, um Hilfe wär ich sehr Dankbar
 
ganz einfach:
Java:
iter.next();
wählt immer das nächste Element aus, auch wenn keines mehr existiert. Also wird dein HTML-Dokument durchiteriert und am Ende wird der Iterator auf die Null-Referenz gesetzt, nachdem das letzte Element verarbeitet wurde.
 
Hi,
ich habe da ein Codebeispiel für dich, wie es ein wenig einfacher und übersichtlicher geht. ;)
Java:
public class NotenRechner
{
	public static void main(final String args[]) throws MalformedURLException {
		final URL url = new URL(args[0]);
		Reader reader = null;
		ParserDelegator parser = null;
		try {
			reader = new InputStreamReader((InputStream) url.getContent());
			parser = new ParserDelegator();
			parser.parse(reader, new HtmlParserFilter(), false);
		} catch(final IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if(reader != null) {
					reader.close();
				}
			} catch(final IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	private static final class HtmlParserFilter extends HTMLEditorKit.ParserCallback {
		@Override
		public void handleStartTag(final HTML.Tag t, final MutableAttributeSet a, final int pos) {
			if (t == HTML.Tag.TD) {
				System.out.println("TD gefunden!");
				//System.out.println(a.getAttribute(HTML.Attribute...));
			}
		}
	}
}

Gruß

Fabio
 
Zurück