2010年7月18日日曜日

JavaでXPathを使ってみた

Sample.java
import java.io.FileInputStream;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory;

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

public class Sample {
    public static void main(String[] args) throws Exception {
        Document document =
            DocumentBuilderFactory
            .newInstance()
            .newDocumentBuilder()
            .parse(new FileInputStream("books.xml"));
        XPathExpression xpath =
            XPathFactory
            .newInstance()
            .newXPath()
            .compile("//book[@year='2000']/title/text()");
        Node node = (Node)xpath.evaluate(document, XPathConstants.NODE);
        if (null != node)
            System.out.println(node.getNodeValue());
        else
            System.out.println("not found");
    }
}
books.xml
<?xml version="1.0" encoding="utf-8"?>
<inventory>
    <book year="2000">
        <title>Snow Crash</title>
        <author>Neal Stephenson</author>
        <publisher>Spectra</publisher>
        <isbn>0553380958</isbn>
        <price>14.95</price>
    </book>
    <book year="2005">
        <title>Burning Tower</title>
        <author>Larry Niven</author>
        <author>Jerry Pournelle</author>
        <publisher>Pocket</publisher>
        <isbn>0743416910</isbn>
        <price>5.99</price>
    </book>
</inventory>

そもそも、AndroidでXMLしたくて調べたのだけれど、
XPathはAPI Level 8 (Android 2.2) でプラットフォームに取り込まれた。
最近ターゲットにしているAPI Level 4 (Android 1.6) では標準ではなかった。

参考: Java XPath API