package com.xpath.test;
import java.io.File; import java.io.IOException;
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpression; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException;
/** * @description 使用JDOM包中的XPath解析xml文件 * @author Zhou-Jingxian * */ public class XPathSample { public static void main(String[] args) { try { DocumentBuilderFactory factory = DocumentBuilderFactory .newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
File file = new File(XPathSample.class.getResource("Book.xml").getFile()); //"D:/J2EE/studyspace_6.0/XPathSample/books.xml" Document doc = (Document) builder.parse(file);
XPathFactory xFactory = XPathFactory.newInstance();
XPath xpath = xFactory.newXPath();
String booknames = xpath.evaluate("/books/book[2]/name", doc); System.out.println(booknames); String expression = ""; // expression = "//book[name='Thinking in Java']"; expression = "//book"; XPathExpression expr = xpath.compile(expression);
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) { Node node = nodes.item(i); System.out.println(node.getBaseURI() + "--" + node.getLocalName() + "--" + node.getNamespaceURI() + "--" + node.getNodeName() + "--" + node.getNodeType() + "--" + node.getPrefix() + "--" + node.getTextContent() + "--" + node.getAttributes() + "--" + node.getOwnerDocument() + "--" + node.getParentNode() + "--" + nodes.item(i).getNodeValue()); } } catch (XPathExpressionException e) { e.printStackTrace(); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
} }
Book.xml和XPathSample同目录
<?xml version="1.0" encoding="UTF-8"?> <books> <book> <name>Java Core II</name> <price>119.00RMB</price> </book> <book> <name>Effective Java</name> <price>52.00RMB</price> </book> <book> <name>Thinking in Java</name> <price>108.00RMB</price> </book> </books>
在 http://www.jdom.org/可以下载JDOM的最新版本,将压缩包中的jdom.jar及lib目录下的全部jar包加入到classpath就可以了。 (附件上传了一个1.1.1的jdom包)