XPath技術(快速獲取節點)


XPath技術 

1 引入

問題:當使用dom4j查詢比較深的層次結構的節點(標簽,屬性,文本),比較麻煩!!!

 2 xPath作用

主要是用於快速獲取所需的節點對象。

3 在dom4j中如何使用xPath技術

1)導入xPath支持jar包 。  jaxen-1.1-beta-6.jar

2)使用xpath方法

                                                      List<Node>  selectNodes("xpath表達式");   查詢多個節點對象

                                                      Node       selectSingleNode("xpath表達式");  查詢一個節點對象

                                   

4 xPath語法

                                    /      絕對路徑      表示從xml的根位置開始或子元素(一個層次結構)

                                    //     相對路徑       表示不分任何層次結構的選擇元素。

                                    *      通配符         表示匹配所有元素

                                    []      條件           表示選擇什么條件下的元素

                                    @     屬性            表示選擇屬性節點

                                    and     關系          表示條件的與關系(等價於&&)

                                    text()    文本           表示選擇文本內容

5 案例

                                    用戶登錄功能:

                                             用戶輸入用戶名和密碼 -> 到“數據庫”查詢是否有對應的用戶 ->

                                                      有: 則表示登錄成功

                                                      沒有: 則表示登錄失敗

 

                                    用xml當做數據庫

                                                      user.xml   用來存儲用戶的數據

1、模擬用戶登錄效果

package gz.itcast.b_xpath;

import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

/**
 * xpath案例: 模擬用戶登錄效果
 * @author APPle
 *
 */
public class Demo3 {

	public static void main(String[] args)throws Exception{
		//1.獲取用戶輸入的用戶名和密碼
		BufferedReader br = 
				new BufferedReader(new InputStreamReader(System.in));
		
		System.out.println("請輸入用戶名:");
		String name = br.readLine();
		
		System.out.println("請輸入密碼:");
		String password = br.readLine();
		
		//2.到“數據庫”中查詢是否有對應的用戶
		//對應的用戶:  在user.xml文件中找到一個
		   //name屬性值為‘用戶輸入’,且password屬性值為‘用戶輸入’的user標簽
		Document doc = new SAXReader().read(new File("./src/user.xml"));
		Element userElem = (Element)doc.selectSingleNode("//user[@name='" +name +"' and @password='"+password+"']");
		
		if(userElem!=null){
			//登錄成功
			System.out.println("登錄成功");
		}else{
			//登錄失敗
			System.out.println("登錄失敗");
		}
	}

}

 2、讀取一個規范的html

package gz.itcast.b_xpath;

import java.io.File;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

/**
 * 使用xpath技術讀取一個規范的html文檔
 * @author APPle
 *
 */
public class Demo4 {

	public static void main(String[] args) throws Exception{
		Document doc = new SAXReader().read(new File("./src/personList.html"));
		//System.out.println(doc);
		
		//讀取title標簽
		Element titleElem = (Element)doc.selectSingleNode("//title");
		String title = titleElem.getText();
		System.out.println(title);
		
		/**
		 * 練習:讀取聯系人的所有信息
		 * 按照以下格式輸出:
		 * 		 編號:001 姓名:張三 性別:男 年齡:18 地址:xxxx 電話: xxxx
		 *       編號:002 姓名:李四 性別:女 年齡:20 地址:xxxx 電話: xxxx
		 *       ......
		 */
		//1.讀取出所有tbody中的tr標簽
		List<Element> list = (List<Element>)doc.selectNodes("//tbody/tr");
		//2.遍歷
		for (Element elem : list) {
			//編號
			//String id = ((Element)elem.elements().get(0)).getText();
			String id = elem.selectSingleNode("td[1]").getText();
			//姓名
			String name = ((Element)elem.elements().get(1)).getText();
			//性別
			String gender = ((Element)elem.elements().get(2)).getText();
			//年齡
			String age = ((Element)elem.elements().get(3)).getText();
			//地址
			String address = ((Element)elem.elements().get(4)).getText();
			//電話
			String phone = ((Element)elem.elements().get(5)).getText();
			
			System.out.println("編號:"+id+"\t姓名:"+name+"\t性別:"+
								gender+"\t年齡:"+
								age+"\t地址:"+address+
								"\t電話:"+phone);
		}
	}
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM