Разбор HTML-тегов TD с определенными необязательными атрибутами с использованием Swing в Java - PullRequest
0 голосов
/ 23 ноября 2011

Я новичок в разборе HTML с использованием Java. Я хочу получить текст между тегами, но эти теги содержат некоторые необязательные атрибуты. например, у меня есть следующая строка

Привет, мир!

Я хочу извлечь текст только из второй ячейки, которая называется «Мир!». (и имеет разные атрибуты от "Hello")

То, что я нашел здесь пока:

import java.io.*;
import java.net.URL;
import javax.swing.text.*;
import javax.swing.text.html.*;
import javax.swing.text.html.parser.*;

public class HtmlParseDemo {

    public static void main(String[] args) throws Exception {

        Reader reader = new StringReader("<tr><td align=\"center\" width=\"408\"><font color=\"#000000\">"
                + "Hello </font></td><td align=\"center\" width=\"275\"><font color=\"#0000FF\">World! "
               + "</font></td></tr>");
        HTMLEditorKit.Parser parser = new ParserDelegator();
        parser.parse(reader, new HTMLTableParser(), true);
        reader.close();
    }
}

class HTMLTableParser extends HTMLEditorKit.ParserCallback {

    private boolean encounteredATableRow = false;

    public void handleText(char[] data, int pos) {
        if (encounteredATableRow) {
            System.out.println(new String(data));
        }
    }

    public void handleStartTag(HTML.Tag t, MutableAttributeSet a, int pos) {
        if (t == HTML.Tag.TD) {
            encounteredATableRow = true;
        }
    }

    public void handleEndTag(HTML.Tag t, int pos) {
        if (t == HTML.Tag.TD) {
            encounteredATableRow = false;
        }
    }
}

Выход:

Hello
World!

Выводит весь текст относительно атрибутов.

Есть идеи, пожалуйста?

Ответы [ 2 ]

2 голосов
/ 23 ноября 2011

Не тестировалось.

HTMLEditorKit kit=new HTMLEditorKit();
Document doc=kit.createDefaultDocument();
kit.read(inputStream, doc, 0);
doc.getText(0, doc.getLength());
0 голосов
/ 24 ноября 2011

Я сделал это, и это сработало:

import java.io.*;
import java.net.URL;
import javax.swing.text.*;
import javax.swing.text.html.*;
import javax.swing.text.html.parser.*;

public class HtmlParseDemo {

    public static void main(String[] args) throws Exception {

        Reader reader = new StringReader("<tr><td align=\"center\" width=\"408\"><font color=\"#000000\">"
                + "Hello </font></td><td align=\"center\" width=\"275\"><font color=\"#0000FF\">World! "
               + "</font></td></tr>");
        HTMLEditorKit.Parser parser = new ParserDelegator();
        parser.parse(reader, new HTMLTableParser(), true);
        reader.close();
    }
}
class HTMLTableParser extends HTMLEditorKit.ParserCallback {

    private boolean encounteredATableRow = false;

    public void handleText(char[] data, int pos) {
        if (encounteredATableRow) {
            System.out.println(new String(data));
        }
    }

    public void handleStartTag(HTML.Tag t, MutableAttributeSet a, int pos) {
        String name1 = (String) a.getAttribute(HTML.Attribute.WIDTH);
        if (t == HTML.Tag.TD) {
            if (name1 != null && name1.equalsIgnoreCase("275") == true) {
//                System.out.println(name1);
                encounteredATableRow = true;
            }
        }
    }

    public void handleEndTag(HTML.Tag t, int pos) {
        if (t == HTML.Tag.TD) {
            encounteredATableRow = false;
        }
    }
}
...