メモ
//TestXpath.java import java.io.StringReader; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathFactory; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; public class TestXpath { public static void main(String[] args) throws Exception{ String xml = "<ro>" + " <ch attr = 'b' sub='b'>bbb</ch>" + " <ch>none</ch>" + " <ch attr = 'c' sub = 'cc'>ccc</ch>" + " <pa name='pupu'>" + " <ch attr='d' sub='d'>ddd</ch>" + " <nd>mine</nd>" + " <nd>yours</nd>" + " </pa>" + " <nd>other</nd>" + "</ro>"; InputSource is = new InputSource(new StringReader(xml)); Document d = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(is); XPathFactory xf = XPathFactory.newInstance(); XPath xp = xf.newXPath(); System.out.println(xp.evaluate("//ch[@attr='d']", d)); System.out.println(xp.evaluate("//ch[@attr][2]", d)); System.out.println(xp.evaluate("//pa/ch", d)); System.out.println(xp.evaluate("//nd[2]", d)); System.out.println(xp.evaluate("//ch[4]", d));//これはだめ System.out.println(xp.evaluate("//ch[@attr!=@sub]", d)); System.out.println(xp.evaluate("//ch[@attr='d']/parent::*/@name", d)); System.out.println(xp.evaluate("count(//ch)", d)); double c = (Double)xp.evaluate("count(//nd)", d, XPathConstants.NUMBER); System.out.println(c); //ノード集合 System.out.println("--"); NodeList nl = (NodeList) xp.evaluate("//ch", d, XPathConstants.NODESET); for(int i = 0; i < nl.getLength(); ++i){ System.out.println(nl.item(i).getTextContent()); } //属性の集合 System.out.println("--"); nl = (NodeList) xp.evaluate("//ch/@attr", d, XPathConstants.NODESET); for(int i = 0; i < nl.getLength(); ++i){ System.out.println(nl.item(i).getTextContent()); } } }