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
簡単ですが以上になります。