import java.io.File;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
public class TestDom4jReadExmple
{
/*
* 創建一個測試xml bicashy.xml
*
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student age="25">
<name>雲天河</name>
<college>野外學院</college>
<telephone>62354666</telephone>
<notes>一個從小在山野里長大的少年,雙親早亡,小小年紀就開始了自立的生活。</notes>
</student>
<student>
<name>韓菱紗</name>
<college leader="俠盜高飛">盜墓學院</college>
<telephone>62358888</telephone>
<notes>女,出身於盜墓世家,卻對辨識墓穴位置、破解詭異機關、地脈風水之學頗有研究。</notes>
</student>
<student age="18">
<name>柳夢璃</name>
<college leader="">名門貴族</college>
<telephone>66666666</telephone>
<notes>夢璃是一個滿懷柔情的女孩子,但她最溫柔的一面只會留給自己喜歡的人。</notes>
</student>
<student age="18">
<name>慕容紫英</name>
<college>崑崙學院</college>
<telephone>88888888</telephone>
<notes>外冷內熱、嫉惡如仇的熱血青年,不但劍術超羣,鑄劍之術更是厲害。</notes>
</student>
</students>
*/
public static void main(String[] args) {
try{
//獲取解析完後的解析信息
//利用XPath操作XML文件,獲取想要的屬性值
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new File("d:/bicashy.xml"));
/*直接定位到student name爲雲天河的節點的age屬性*/
List list = document.selectNodes("/students/student[name=\"雲天河\"]/@age");
Iterator iter = list.iterator();
if (iter.hasNext()) {
Attribute attribute = (Attribute) iter.next();
System.out.println("雲天河-"+attribute.getName()+":"+attribute.getValue());
}
/*獲取學生姓名爲"韓菱紗"所在的學院名稱*/
list = document.selectNodes("/students/student[name=\"韓菱紗\"]/college");
iter = list.iterator();
if (iter.hasNext()) {
Element element = (Element) iter.next();
String name = element.getName();
String value = element.getText();
System.out.println("韓菱紗-"+name+":"+value);
}
/*獲取學生姓名爲"韓菱紗"所在學院的師傅*/
list = document.selectNodes("/students/student[name=\"韓菱紗\"]/college/@leader");
iter = list.iterator();
if (iter.hasNext()) {
Attribute attribute = (Attribute) iter.next();
System.out.println("韓菱紗-college-"+attribute.getName()+":"+attribute.getValue());
}
/*獲取學生姓名爲"柳夢璃"的簡介*/
list = document.selectNodes("/students/student[name=\"柳夢璃\"]/notes");
iter = list.iterator();
if (iter.hasNext()) {
Element element = (Element) iter.next();
System.out.println("柳夢-"+element.getName()+":"+element.getText());
}
/*獲取年齡爲"18"的學生的姓名、學院和電話號碼*/
list = document.selectNodes("/students/student[@age='18']");
for(Object o:list){
Node n = (Node ) o;
Element name = (Element)n.selectObject("name");
Element college = (Element)n.selectObject("college");
Element telephone = (Element)n.selectObject("telephone");
System.out.println(name.getText()+"__ "+"college:"+college.getText()
+" telephone:"+telephone.getText());
}
/*獲取年齡爲"18",college的leader爲空的學院名稱*/
list = document.selectNodes("/students/student[@age='18']/college[@leader='']");
iter = list.iterator();
if (iter.hasNext()) {
Element element = (Element) iter.next();
System.out.println(""+element.getName()+":"+element.getText());
}
/*獲取年齡爲"18"姓名爲"柳夢璃"、姓名、學院和電話號碼*/
list = document.selectNodes("/students/student[@age='18'][name='柳夢璃']");
for(Object o:list){
Node n = (Node ) o;
Element name = (Element)n.selectObject("name");
Element college = (Element)n.selectObject("college");
Element telephone = (Element)n.selectObject("telephone");
System.out.println(name.getText()+"__ "+"college:"+college.getText()
+" telephone:"+telephone.getText());
}
/*獲取年齡大於18的人的 姓名、學院和電話號碼*/
list = document.selectNodes("/students/student[@age>18]");
for(Object o:list){
Node n = (Node ) o;
Element name = (Element)n.selectObject("name");
Element college = (Element)n.selectObject("college");
Element telephone = (Element)n.selectObject("telephone");
System.out.println(name.getText()+"__ "+"college:"+college.getText()
+" telephone:"+telephone.getText());
}
/*獲取student所有的人的 姓名、學院和電話號碼 */
//注 /students/student 可簡寫爲//student根節點可以省去
list = document.selectNodes("//student");
for(Object o:list){
Node n = (Node ) o;
Element name = (Element)n.selectObject("name");
Element college = (Element)n.selectObject("college");
Element telephone = (Element)n.selectObject("telephone");
System.out.println(name.getText()+"__ "+"college:"+college.getText()
+" telephone:"+telephone.getText());
}
}catch(Exception ex){
ex.printStackTrace();
}
}
}