packagecom.taoxi.java.xpath;importjava.io.File;importjava.io.FileInputStream;importjava.io.InputStream;importjavax.xml.parsers.DocumentBuilder;importjavax.xml.parsers.DocumentBuilderFactory;importjavax.xml.xpath.XPath;importjavax.xml.xpath.XPathConstants;importjavax.xml.xpath.XPathExpressionException;importjavax.xml.xpath.XPathFactory;importorg.w3c.dom.Document;importorg.w3c.dom.Node;importorg.w3c.dom.NodeList;public classXPathDemo {private staticDocument doc;private staticXPath xpath;public static void main(String[] args) throwsException {
init();
getRootEle();
getChildEles();
getPartEles();
haveChildsEles();
getLevelEles();
getAttrEles();//打印根节点下的所有元素节点
System.out.println(doc.getDocumentElement().getChildNodes().getLength());
NodeList nodeList=doc.getDocumentElement().getChildNodes();for (int i = 0; i < nodeList.getLength(); i++) {if (nodeList.item(i).getNodeType() ==Node.ELEMENT_NODE) {
System.out.print(nodeList.item(i).getNodeName()+ " ");
}
}
}//初始化Document、XPath对象
public static void init() throwsException {//创建Document对象
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
dbf.setValidating(false);
DocumentBuilder db=dbf.newDocumentBuilder();//两种加载资源文件的方法//InputStream resourceAsStream = XPathDemo.class.getResourceAsStream("/demo.xml");
InputStream resourceAsStream = XPathDemo.class.getClassLoader().getResourceAsStream("demo.xml");
doc=db.parse(resourceAsStream);//创建XPath对象
XPathFactory factory =XPathFactory.newInstance();
xpath=factory.newXPath();
}//获取根元素//表达式可以更换为/*,/rss
public static void getRootEle() throwsXPathExpressionException {
Node node= (Node) xpath.evaluate("/rss", doc, XPathConstants.NODE);
System.out.println(node.getNodeName()+ "--------"
+node.getNodeValue());
}//获取子元素并打印
public static void getChildEles() throwsXPathExpressionException {
NodeList nodeList= (NodeList) xpath.evaluate("/rss/channel/*", doc,
XPathConstants.NODESET);for (int i = 0; i < nodeList.getLength(); i++) {
System.out.print(nodeList.item(i).getNodeName()+ " ");
}
System.out.println();
}//获取部分元素//只获取元素名称为title的元素
public static void getPartEles() throwsXPathExpressionException {
NodeList nodeList= (NodeList) xpath.evaluate("//*[name() = 'title']",
doc, XPathConstants.NODESET);for (int i = 0; i < nodeList.getLength(); i++) {
System.out.print(nodeList.item(i).getNodeName()+ "-->"
+nodeList.item(i).getTextContent());
}
System.out.println();
}//获取包含子节点的元素
public static void haveChildsEles() throwsXPathExpressionException {
NodeList nodeList= (NodeList) xpath.evaluate("//*[*]", doc,
XPathConstants.NODESET);for (int i = 0; i < nodeList.getLength(); i++) {
System.out.print(nodeList.item(i).getNodeName()+ " ");
}
System.out.println();
}//获取指定层级的元素
public static void getLevelEles() throwsXPathExpressionException {
NodeList nodeList= (NodeList) xpath.evaluate("/*/*/*/*", doc,
XPathConstants.NODESET);for (int i = 0; i < nodeList.getLength(); i++) {
System.out.print(nodeList.item(i).getNodeName()+ "-->"
+ nodeList.item(i).getTextContent() + " ");
}
System.out.println("-----------------------------");
}//获取指定属性的元素//获取所有大于指定价格的书箱
public static void getAttrEles() throwsXPathExpressionException {
NodeList nodeList= (NodeList) xpath.evaluate("//bookstore/book[price>35.00]/title", doc,
XPathConstants.NODESET);for (int i = 0; i < nodeList.getLength(); i++) {
System.out.print(nodeList.item(i).getNodeName()+ "-->"
+ nodeList.item(i).getTextContent() + " ");
}
System.out.println();
}
}