マイペースなプログラミング日記

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

CyberNeko HTML Parser

研究の関係でJavaのHTMLパーサを探していたら、いくつか候補を見つけたけど、CyberNeko HTML Parserを使ってみることにした。Xercesに依存しているのでxercesを用意しないといけないけど、パース後のDOM木の操作にJavaXMLの標準APIをそのまま使えるのが嬉しい。試しにこのブログの最新タイトルを取り出すプログラムを作ってみた。DOMParser以外はJava1.5以降のJava標準APIを使っている

import org.cyberneko.html.parsers.DOMParser;

import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Document;

import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;
import javax.xml.xpath.XPathExpression;

public class Test{
    public static void main(String[] args) throws Exception{
        DOMParser parser = new DOMParser();
        parser.parse("http://d.hatena.ne.jp/d-kami/");

        Document document = parser.getDocument();

        XPathFactory factory = XPathFactory.newInstance();
        XPath xpath = factory.newXPath();
        XPathExpression expr 
            = xpath.compile("//UL[@class='hatena-section']/LI");

        Object result = expr.evaluate(document, XPathConstants.NODESET);
        NodeList nodeList = (NodeList)result;

        for(int i = 0; i < nodeList.getLength(); i++){
            Node node = nodeList.item(i);
            String title = xpath.evaluate("A/text()", node);
            System.out.println(title);
        }
    }
}