Object Design
Home > Index > HTMLのマークアップを除去する...HTML文書からテキストファイルを作成(Javaを使用)

HTMLのマークアップを除去する...HTML文書からテキストファイルを作成(Javaを使用)

HTMLのマークアップをJavaで除去する簡単な方法はないか、と調べてみると、 javax.swing.text.html.HTMLEditorKit.ParserCallback という 標準のJavaのクラスライブラリに含まれているクラスでできることが判明。

関連エントリー

XSLTを使えばもっと簡単に処理できることが判明。ただし、対象となるファイルは well-formed な XML,XHTML。

STEP1 HTMLEditorKit.ParserCallback を拡張したHTMLParser を書く

HTMLParser.java 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"));
    }
}

STEP2 HTMLParserを使ってマークアップを除去するStripMarkupクラス

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/
関連キーワード