Java로 HTML를 파싱해야 할때가 가끔 존재한다. 이럴때 사용하면 유용한 소스를 소개한다.
해당 소스는 SWING에 포함되어 있으며, 여타 공개된 파서 이상의 기능을 제공한다.
final StringBuffer plain = new StringBuffer();
HTMLEditorKit.Parser parser;
parser = new ParserDelegator();
try {
parser.parse( new StringReader( stringData), new HTMLEditorKit.ParserCallback() {
public void handleText(char[] data, int pos) {
// Text가 존재할때 호출된다.
plain.append( data);
plain.append( ' ');
}
public void handleStartTag(HTML.Tag t, MutableAttributeSet a, int pos) {
// Tag가 시작될떄 호출된다. 예) <A ...>
}
public void handleEndTag(HTML.Tag t, int pos) {
// Tag가 끝날때 호출된다. 예) </A>
}
public void handleSimpleTag(HTML.Tag t, MutableAttributeSet a, int pos) {
// 단일 테그 형태일때 호출된다. <BR/> 같은 테그에서..
}
public void handleComment(char[] data, int pos) { /* NULL */ }
public void handleError(String errorMsg, int pos) { /* NULL */}
}, true);
} catch (IOException e) { e.printStackTrace(); }
필자도 여러개의 파서를 사용해 봤지만 가장 마음에 드는 파서이다.
참고로, 해당 파서는 HTML 3.2 포맷을 기준으로 처리한다. 그래서 가끔 파싱 못하는 테그도 존재한다.
이럴 경우...