HTMLのマークアップをJavaで除去する簡単な方法はないか、と調べてみると、javax.swing.text.html.HTMLEditorKit.ParserCallback という標準のJavaのクラスライブラリに含まれているクラスでできることが判明。
関連エントリー XSLTを使えばもっと簡単に処理できることが判明。ただし、対象となるファイルは well-formed な XML,XHTML。 XMLのマークアップを除去する...XML文書からテキストファイルを作成
import javax.swing.text.html.HTMLEditorKit;
class HTMLParser extends HTMLEditorKit.ParserCallback{
private StringBuffer sb;
public HTMLParser(){
sb=new StringBuffer();
}
public String getHtml(){
return sb.toString();
}
public void handleText(char"] data, int pos) {
sb.append(new String(data));
sb.append(System.getProperty("line.separator"));
}
}
[StripMarkup.java":src/StripMarkup.java
import java.io.*;
import java.net.*;
import javax.swing.text.html.parser.ParserDelegator;
public class StripMarkup {
public static void main(String[] args) throws Exception{
if(args.length==1){
URL url=new URL(args[0]);
String enc="UTF-8";//url.openConnection().getContentEncoding();
InputStreamReader r=new InputStreamReader(url.openStream(),enc);
boolean ignoreCharSet=true;
HTMLParser hp=new HTMLParser();
ParserDelegator parser=new ParserDelegator();
parser.parse(r, hp, ignoreCharSet);
r.close();
System.out.println(hp.getHtml());
}
}
}
StripMarkupを起動するときにURLを指定する。
指定したURLの内容を(UTF-8でエンコードされていることが想定されているので、それ以外の文字コードでエンコードされているページを処理しようとすると文字化けします、たぶん)
$ javac HTMLParser.java StripMarkup.java
$ java StripMarkup http://osima.jp/
MindBoard は 直観的な操作で簡単にマインドマップを描くことができる Android タブレット用アプリです。