XPath技術

黄舟
黄舟原創
2017-02-20 15:14:541506瀏覽

XPath技術

基本概述


    XPath即為XML路徑語言,它是一種用來確定XML (標準通用標記語言的子集)文件中某部分位置的語言。 XPath基於XML的樹狀結構,提供在資料結構樹中尋找節點的能力。起初 XPath 的提出的初衷是將其作為一個通用的、介於XPointerXSLT間的語法模型。但是 XPath 很快的被開發者採用來當作小型查詢語言。

PS:其配合DOM4J解析技術,彌補了DOM4J不能跨層取元素的缺點。需要引入jaxen-1.1-beta-6.jar包。

 

XPath原理

    XPath就好比SQL查詢語句,能夠對DOM樹進行查詢操作,並取得對應結果。

 

XPath案例

XML9.xml

<?xml version="1.0" encoding="utf-8"?>
<AAA>
	<BBB id="b1">Hello World B1</BBB>
	<CCC id="c1"/>
	<BBB id="b2">Hello World B2</BBB>
	<BBB>Hello World B3</BBB>
	<DDD>
		<BBB id="b3">Hello World B4</BBB>
	</DDD>
	<CCC>
		<DDD>
			<BBB id="b4"/>
			<BBB id="b5"/>
		</DDD>
	</CCC>
</AAA>


package com.pc;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

/**
 * 
 * @author Switch
 * @function DOM4j配合xpath
 * 
 */
public class XML9 {
	public static void main(String[] args) throws Exception {
		// 1.得到SAXReader解析器
		SAXReader saxReader = new SAXReader();
		// 2.指定解析哪个文件
		Document document = saxReader.read("src/com/pc/XML9.xml");
		// 3.使用XPath随意读取任何一层的元素
		// document.selectNodes(); //返回多个元素
		// document.selectSingleNode(); // 返回一个元素

		// 取出AAA下面的所有BBB 3个
		// List nodeList = document.selectNodes("/AAA/BBB");
		// 取出所有的BBB 6个
		// List nodeList = document.selectNodes("//BBB");
		// System.out.println(nodeList.size());

		// 取出AAA下面的DDD下面的最后一个BBB元素的内容 Hello World B4
		// List nodeList = document.selectNodes("/AAA/DDD//BBB[last()]");
		// System.out.println(((Element)nodeList.get(0)).getTextTrim());

		// 取出AAA下面的CCC下面的DDD下面的所有元素 2个
		// List nodeList = document.selectNodes("/AAA/CCC/DDD/*");

		// 取出所有有三个祖先元素的BBB元素
		// List nodeList = document.selectNodes("/*/*/*/BBB");
		// System.out.println(nodeList.size());

		// 取出AAA下面的第一个BBB元素的内容 Hello World B1
		// List nodeList = document.selectNodes("/AAA/BBB[1]");
		// System.out.println(((Element)nodeList.get(0)).getTextTrim());
		// Element element = (Element) document.selectSingleNode("/AAA/BBB[1]");
		// System.out.println(element.getTextTrim());

		// 取出所有有id属性的元素的id属性 5个
		// List nodeList = document.selectNodes("//@id");
		// System.out.println(nodeList.size());
		// 取出第一个有id属性的元素的id属性的值 b1
		// System.out.println(((Attribute)nodeList.get(0)).getText());

		// 取出所有有id属性的CCC元素
		// List nodeList = document.selectNodes("//CCC[@id]");
		// System.out.println(nodeList.size());

		// "//BBB[@*]" 选择有任意属性的BBB元素

		// "//BBB[not(@*)]" 选择没有属性的BBB元素

		// "//BBB[@id=&#39;b1&#39;]" 选择含有属性id且其值为&#39;b1&#39;的BBB元素

		// 选择含有属性id且其值(在用normalize-space函数去掉前后空格后)为&#39;b2&#39;的BBB元素
		// "//BBB[normalize-space(@id)=&#39;b2&#39;]"

		// "//*[count(BBB)=2]" 选择含有2个BBB子元素的元素

		// "//*[name()=&#39;BBB&#39;]" 选择所有名称为BBB的元素(这里等价于//BBB)

		// "//*[starts-with(name(),&#39;B&#39;)]" 选择所有名称以"B"起始的元素

		// "//*[contains(name(),&#39;C&#39;)]" 选择所有名称包含"C"的元素

		// "//*[string-length(name()) = 3]" 选择名字长度为3的元素

		// "//*[string-length(name()) < 4]" 选择名字长度小于3的元素
		// 同样的将<替换成大于号则是大于
		// 11个
		// List nodeList = document.selectNodes("//*[string-length(name()) < 4]");
		// System.out.println(nodeList.size());
		
		// "//CCC | //BBB" 选择所有的CCC和BBB元素
	}
}


PS:透過上述案例中的XPath語句,基本的 XML查詢,使用是沒問題的。

 以上是XPath技術 的內容,更多相關內容請關注PHP中文網(www.php .cn)!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:XML編程-DOM4J下一篇:XML編程-DOM4J