XPath概述 及 dom4j支持xpath的操作
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
XPath概述及實(shí)例
? ? 1、什么是XPath
? ? 2、使用dom4j支持xpath具體操作(****這個很重要******)
? ? 3、學(xué)生管理系統(tǒng)的代碼實(shí)現(xiàn)(*********)
==========================================================
1、什么是XPath?
? ? XPath即為XML路徑語言(XML Path Language),它是一種用來確定XML文檔中某部分位置的語言。XPath基于XML的樹狀結(jié)構(gòu),提供在數(shù)據(jù)結(jié)構(gòu)樹中找尋節(jié)點(diǎn)的能力。
起初 XPath 的提出的初衷是將其作為一個通用的、介于XPointer與XSL間的語法模型。但是 XPath 很快的被開發(fā)者采用來當(dāng)作小型查詢語言。
? ? 可以直接獲取到某個元素
? ? ? ? 第一種形式
? ? ? ? ? ? /AAA/DDD/BBB: 表示一層一層的,AAA下面 DDD下面的BBB
? ? ? ? 第二種形式
? ? ? ? ? ? //BBB: 表示所有只要是BBB元素,都得到。
? ? ? ? 第三種形式
? ? ? ? ? ? /*:所有元素。
? ? ? ? 第四種形式
? ? ? ? ? ? BBB[1]: 表示第一個BBB元素。
? ? ? ? ? ? BBB[last()]: 表示最后一個BBB元素。
? ? ? ? 第五種形式
? ? ? ? ? ? //BBB[@id]: 表示所有只要BBB元素上面有id屬性,都得到。
? ? ? ? 第六種形式
? ? ? ? ? ? //BBB[@id='b1']: 表示所有只要BBB元素上面有id屬性,并且屬性值是b1
?
2、使用dom4j支持xpath具體操作
? ? ? ? 默認(rèn)的情況下,dom4j不支持xpath,如果想要在dom4j里面是有xpath,
? ? 第一步需要在項(xiàng)目中引入支持xpath的jar包:jaxen-1.1-beta-6.jar
?
? ? 在dom4j里面提供了兩個方法,用來支持xpath
? ? ? ? selectNodes("xpath表達(dá)式"):獲取符合xpath表達(dá)式的 多個節(jié)點(diǎn)。
? ? ? ? selectSingleNode("xpath表達(dá)式"):獲取符合xpath表達(dá)式的 一個節(jié)點(diǎn)。
?
? ? 案例:
? ? 1) 使用xpath實(shí)現(xiàn):查詢xml中所有name元素的值.
? ? ? ? 所有name元素的xpath表示: //name
? ? ? ? 使用selectNodes("//name");
? ? ? ? 代碼和步驟
? ? ? ? ? ? /*
? ? ? ? ? ? * 1、得到document
? ? ? ? ? ? * 2、直接使用selectNodes("//name")方法得到所有的name元素
? ? ? ? ? ? * */
? ? ? ? //創(chuàng)建解析器
? ? ? ? ? ? SAXReader saxReader = new SAXReader();
? ? ? ? //得到document
? ? ? ? ? ? Document document = saxReader.read("src/p1.xml");
? ? ? ? //使用selectNodes("//name")方法得到所有的name元素
? ? ? ? ? ? List<Node> list = document.selectNodes("//name");
? ? ? ? //遍歷list集合
? ? ? ? ? ? for (Node node : list) {
? ? ? ? ? ? ? ? //node是每一個name元素
? ? ? ? ? ? ? ? //得到name元素里面的值
? ? ? ? ? ? ? ? String s = node.getText();
? ? ? ? ? ? ? ? System.out.println(s);
? ? ? ? ? ? }
?
? ? 2) 使用xpath實(shí)現(xiàn):獲取第一個p1下面的name的值
? ? ? ? //p1[@id1='aaaa']/name
? ? ? ? 使用到 selectSingleNode("//p1[@id1='aaaa']/name")
? ? * 步驟和代碼
? ? ? ? /*
? ? ? ? * 1、得到document
? ? ? ? * 2、直接使用selectSingleNode方法實(shí)現(xiàn)
? ? ? ? ? ? ? ?xpath : //p1[@id1='aaaa']/name
? ? ? ? * */
? ? ? ? //創(chuàng)建解析器
? ? ? ? ? ? SAXReader saxReader = new SAXReader();
? ? ? ? //得到document
? ? ? ? ? ? Document document = saxReader.read("src/p1.xml");
? ? ? ? //直接使用selectSingleNode方法實(shí)現(xiàn)
? ? ? ? ? ? Node name1 = document.selectSingleNode("//p1[@id1='aaaa']/name"); //name的元素
? ? ? ? //得到name里面的值
? ? ? ? ? ? String s1 = name1.getText();
? ? ? ? ? ? System.out.println(s1);
?
3、學(xué)生管理系統(tǒng)的代碼實(shí)現(xiàn)(*********)
? ? 使用xml當(dāng)做數(shù)據(jù),存儲學(xué)生信息
? ? 創(chuàng)建一個xml文件,寫一些學(xué)生信息
? ? 增加操作
? ? ? ? /*
? ? ? ? * 1、創(chuàng)建解析器
? ? ? ? * 2、得到document
? ? ? ? * 3、獲取到根節(jié)點(diǎn)
? ? ? ? * 4、在根節(jié)點(diǎn)上面創(chuàng)建stu標(biāo)簽
? ? ? ? * 5、在stu標(biāo)簽上面依次添加id name age
? ? ? ? ? ? ? ? addElement方法添加
? ? ? ? * 6、在id name age上面依次添加值
? ? ? ? ? ? ? ?setText方法
? ? ? ? * 7、回寫xml
? ? ? ? * */
?
? ? 刪除操作(根據(jù)id刪除)
? ? ? ? /*
? ? ? ? * 1、創(chuàng)建解析器
? ? ? ? * 2、得到document
? ? ? ? *
? ? ? ? * 3、獲取到所有的id
? ? ? ? * ?使用xpath //id 返回 list集合
? ? ? ? * 4、遍歷list集合
? ? ? ? * 5、判斷集合里面的id和傳遞的id是否相同
? ? ? ? * 6、如果相同,把id所在的stu刪除(注意:父節(jié)點(diǎn)刪除子節(jié)點(diǎn))
? ? ? ? * 7、回寫xml
? ? ? ? * */
?
? ? 查詢操作(根據(jù)id查詢)
? ? ? ? /*
? ? ? ? * 1、創(chuàng)建解析器
? ? ? ? * 2、得到document
? ? ? ? *
? ? ? ? * 3、獲取到所有的id
? ? ? ? * 4、返回的是list集合,遍歷list集合
? ? ? ? * 5、得到每一個id的節(jié)點(diǎn)
? ? ? ? * 6、id節(jié)點(diǎn)的值
? ? ? ? * 7、判斷id的值和傳遞的id值是否相同
? ? ? ? * 8、如果相同,先獲取到id的父節(jié)點(diǎn)stu
? ? ? ? * 9、通過stu獲取到name age值
?
? ? ? ? ** 把這些值封裝到一個對象里面 返回對象
? ? ? ? *
? ? ? ? * */
轉(zhuǎn)載于:https://my.oschina.net/oszzq/blog/3016224
總結(jié)
以上是生活随笔為你收集整理的XPath概述 及 dom4j支持xpath的操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 和平精英体验服气球是干嘛的
- 下一篇: 云主机与虚拟主机有何区别