HTMLEditorKit.ParserCallback を使ったサンプル

HTMLEditorKit.ParserCallback を使って HTML をパースするサンプルを書いてみました。

・HTMLEditorKit.ParserCallback (Java Platform SE 8 )
https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/text/html/HTMLEditorKit.ParserCallback.html


以下の感じになります。

■ ParserExample.java

package test.html.parser;

import java.util.Enumeration;

import javax.swing.text.MutableAttributeSet;
import javax.swing.text.html.HTML;
import javax.swing.text.html.HTMLEditorKit.ParserCallback;

public class ParserExample extends ParserCallback {
	public void handleStartTag(HTML.Tag t, MutableAttributeSet a, int pos) {
		if (t.equals(HTML.Tag.HTML)) {
			System.out.println(t.toString() + "[handleStartTag]");
		}
	}

	public void handleEndTag(HTML.Tag t, int pos) {
		if (t.equals(HTML.Tag.HTML)) {
			System.out.println(t.toString() + "[handleEndTag]");
		}
	}

	public void handleSimpleTag(HTML.Tag t, MutableAttributeSet a, int pos) {
		if (t.equals(HTML.Tag.META)) {
			System.out.println(t.toString() + "[handleSimpleTag]");
			Enumeration<?> es = a.getAttributeNames();
			while (es.hasMoreElements()) {
				Object o = es.nextElement();
				System.out.println(o.toString() + ":" + a.getAttribute(o).toString());
			}
		}
	}
}


■ Main.java

package test.html.parser;

import java.io.IOException;
import java.io.StringReader;

import javax.swing.text.html.parser.ParserDelegator;

public class Main {
	public static void main(String[] args) throws IOException {
		String content = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=shift_jis\"></head><body></body></html>";

		ParserExample parser = new ParserExample();
		ParserDelegator p = new ParserDelegator();
		p.parse(new StringReader(content), parser, true);
	}
}


■ 実行結果

html[handleStartTag]
meta[handleSimpleTag]
http-equiv:Content-Type
content:text/html; charset=shift_jis
html[handleEndTag]


ParserDelegator#parse を呼び出すと第二引数に渡した ParserExample のコールバックメソッドを呼び出してくれます。実行結果からわかりますが、handleStartTag で開始タグ、handleEndTag で終了タグ、handleSimpleTag で終了タグが存在しないタグが処理されてますね。

・ParserDelegator (Java Platform SE 8 )
https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/text/html/parser/ParserDelegator.html


簡単ですが以上になります。

[ 環境情報 ]
Windows 7 SP1
Java SE 8 Update 74