使用dom4j的xpath解析xlm文件

 

package com.njusc.xmlTest;  
 
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();  
        }  
      }  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章