我测试的环境是:WindowsXP、eclipse3.2、jdk1.6、dom4j1.6.1.jar、z-dom4j-1.4.jar
package org.dom4j.document_study_XPath;
import java.io.File;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
public class XPathTest_03 {
public static void main(String[] args) {
readexml("C:\\seven.xml");//xml文件是上一章节的xml文件
}
//解析原始的xml
public static void readexml(String xmlpath){
SAXReader readxml = new SAXReader();
Document doc = null;
try {
doc = readxml.read(new File(xmlpath));//解析原始的xml
TestSelectNodes_02(doc);
TestSelectNodes_03(doc);
TestSelectNodes_04(doc);
} catch (Exception e) {
e.printStackTrace();
}
}
//通过节点的XPath轴获取一个节点 document 一个Dom4j的Document对象
public static void TestSelectNodes_02(Document document) {
//获取当前节点,child是固定的,root是xml的根节点,book是根节点的子节点
Node book = document.selectSingleNode("child::root/book");
System.out.println(book.getName());
List<Node> nodelist = book.selectNodes("descendant::title");//获取该节点下的所有title节点
//获取该节点下的所有title节点和price节点
List<Node> nodelist1 = book.selectNodes("descendant::title|descendant::price");
for(Node node : nodelist){
System.out.println("title节点的名称是:"+node.getName());
}
System.out.println("================================");
for(Node node : nodelist1){
System.out.println("title节点或price节点的名称是:"+node.getName());
}
}
//通过节点的XPath轴获取一个节点 document 一个Dom4j的Document对象
@SuppressWarnings("unchecked")
public static void TestSelectNodes_03(Document document) {
//获取名称为titlechild的第一个节点
Node book = document.selectSingleNode("//titlechild");
System.out.println("当前节点的名称是:"+book.getName());
//获取该节点的所有父节点
List<Node> nodelist = book.selectNodes("ancestor::*");
for(Node node : nodelist){
System.out.println("该节点以及其所有父节点的名称是:"+node.getName());
}
System.out.println("================================");
//获取该节点以及其所有父节点
List<Node> nodelist1 = book.selectNodes("ancestor-or-self::*");
for(Node node : nodelist1){
System.out.println("该节点以及其所有父节点的名称是:"+node.getName());
}
}
//通过节点的XPath轴获取一个节点 document 一个Dom4j的Document对象
@SuppressWarnings("unchecked")
public static void TestSelectNodes_04(Document document) {
//获取名称为book的第一个节点
Node book = document.selectSingleNode("//book");
System.out.println("当前节点的名称是:"+book.getName());
//获取当前节点的名称为titlechild的所有孙子节点(子节点的子节点)
List<Node> nodelist = book.selectNodes("child::*/child::titlechild");
for(Node node : nodelist){
System.out.println("该节点的所有孙子节点(子节点的子节点)的名称是:"+node.getName());
}
}
}