使用java中的swing解析具有某些可选属性的HTML TD标记

时间:2011-11-23 12:39:07

标签: java swing html-parsing

我是使用Java解析HTML的新手。我想要做的是在标签之间获取文本,但这些标签包含一些可选属性。 例如,我有下面的字符串

你好,世界!

我想提取第二个单元格的文本,即“World!”。 (并且它具有来自“Hello”的不同属性)

到目前为止我找到的here是:

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 个答案:

答案 0 :(得分:2)

未经测试。

HTMLEditorKit kit=new HTMLEditorKit();
Document doc=kit.createDefaultDocument();
kit.read(inputStream, doc, 0);
doc.getText(0, doc.getLength());

答案 1 :(得分:0)

我做到了并且有效:

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;
        }
    }
}