由於DOM4J在解析XML時只能一層一層解析,所以當XML文件層數過多時使用會很不方便,結合XPATH就可以直接獲取到某個元素
使用dom4j支持xpath的操作的幾種主要形式
第一種形式
/AAA/DDD/BBB: 表示一層一層的,AAA下面 DDD下面的BBB
第二種形式
//BBB: 表示和這個名稱相同,表示只要名稱是BBB,都得到
第三種形式
/*: 所有元素
第四種形式
BBB[1]: 表示第一個BBB元素
BBB[last()]:表示最后一個BBB元素
第五種形式
//BBB[@id]: 表示只要BBB元素上面有id屬性,都得到
第六種形式
//BBB[@id='b1'] 表示元素名稱是BBB,在BBB上面有id屬性,並且id的屬性值是b1
使用dom4j支持xpath具體操作
默認的情況下,dom4j不支持xpath,如果想要在dom4j里面是有xpath,第一步需要,引入支持xpath的jar包,如下:
在dom4j里面提供了兩個方法,用來支持xpath
selectNodes("xpath表達式"),獲取多個節點
selectSingleNode("xpath表達式"),獲取一個節點
應用簡單案例:
1.xml文件
<?xml version="1.0" encoding="UTF-8"?> <class> <student> <name>張三</name> <sid>111111</sid> </student> <student id="stu1"> <name>李四</name> <sid>222222</sid> </student> </class>
Java代碼
import java.util.List; import org.dom4j.Document; import org.dom4j.Node; import org.dom4j.io.SAXReader; public class Dom4jXpath { public static void main(String[] args) throws Exception { select();//查詢所有name的值 //select2();//查詢id=stu1的學生的name的值 } //查詢所有name的值 private static void select() throws Exception { SAXReader saxReader=new SAXReader(); Document document=saxReader.read("src/1.xml"); List<Node>list=document.selectNodes("//name"); for(int i=0;i<list.size();i++) System.out.println(list.get(i).getText()); } //查詢id=stu1的學生的name的值 private static void select2() throws Exception { SAXReader saxReader=new SAXReader(); Document document=saxReader.read("src/1.xml"); Node node=document.selectSingleNode("//student[@id='stu1']/name"); System.out.println(node.getText()); } }