日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JDOM/XPATH编程指南

發布時間:2024/4/14 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JDOM/XPATH编程指南 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本文分別介紹了 JDOM 和 XPATH,以及結合兩者進行 XML 編程帶來的好處。

前言

?

XML是一種優秀的數據打包和數據交換的形式,在當今XML大行于天下,如果沒有聽說過它的大名,那可真是孤陋寡聞了。用XML描述數據的優勢顯而易見,它具有結構簡單,便于人和機器閱讀的雙重功效,并彌補了關系型數據對客觀世界中真實數據描述能力的不足。W3C組織根據技術領域的需要,制定出了XML的格式規范,并相應的建立了描述模型,簡稱DOM。各種流行的程序設計語言都紛紛根據這一模型推出了自己的XML解析器,在JAVA世界里,APACHE組織開發的XERCES應該是流行最廣功能最為強大的XML解析器之一。但是由于W3C在設計DOM模型時,并不是針對某一種語言而設計,因此為了通用性,加入了許多繁瑣而不必要的細節 ,使JAVA程序員在開發XML的應用程序過程中感到不甚方便,因此JDOM作為一種新型的XML解析器橫空出世,它不遵循DOM模型,建立了自己獨立的一套JDOM模型(注意JDOM決不是DOM擴展,雖然名字差不多,但兩者是平行的關系),并提供功能強大使用方便的類庫,使JAVA程序員可以更為高效的開發自己的XML應用程序,并極大的減少了代碼量,因此它很快得到了業內的認可,如JBUILDER這樣的航空母艦級的重磅產品都以JDOM為XML解析引擎,足見其名不虛傳。

有了XML數據的描述標準,人們自然就會想到應該有一種查詢語言可以在XML中查找任意節點的數據,就像SQL語句可以在關系性數據庫中執行查詢操作一樣,于是XQUERY和XPATH順應潮流,應運而生。由于XQUERY較為復雜,使用不甚方便,XPATH漸漸成為主流,我們只需對XPATH進行學習,便可以應付所有的查詢要求。在JDOM發布的最新的V1.0bata10版中,已經加入了對XPATH的支持,這無疑是令開發者十分激動的。

學會JDOM和XPATH,你便不再是XML的入門者,在未來的開發生涯中,就像特種兵的多用匕首,為你披荊斬棘,助你勇往直前。閑言少敘,學習還要腳踏實地,從頭開始。

?



回頁首

?

XPATH速成篇

?

XPATH遵循文檔對象模型(DOM)的路徑格式,由于每個XML文檔都可以看成是一棵擁有許多結點的樹,每個結點可以是以下七個類型之一:根(root)、元素(element)、屬性(attribute)、正文(text)、命名空間(namespace)、處理指令(processing instruction)和注釋(comment)。XPATH的基本語法由表達式構成。在計算表達式的值之后產生一個對象,這種對象有以下四種基本類型:節點集合、布爾型、數字型和字符串型 。XPATH基本上和在文件系統中尋找文件類似,如果路徑是以"/"開頭的,就表明該路徑表示的是一個絕對路徑,這和在UNIX系統中關于文件路徑的定義是一致的。以"//"開頭則表示在文檔中的任意位置查找。

不談泛泛的理論,學習XPATH還要從實例學起最為快捷,并有助于你舉一反三。

下面的樣例XML文檔,描述了某臺電腦中硬盤的基本信息(根節點<HD>代表硬盤,<disk>標簽代表硬盤分區,從它的name屬性可以看出有兩個盤符名稱為"C"和"D"的分區;每個分區下都包含<capacity>,<directories><files>三個節點,分別代表了分區的空間大小、目錄數量、所含文件個數):

<?xml version="1.0" encoding="UTF-8"?> <HD><disk name="C"><capacity>8G</capacity><directories>200</directories><files>1580</files></disk><disk name="D"> <capacity>10G</capacity><directories>500</directories><files>3000</files> </disk> </HD>

?

你在XML文檔中使用位置路徑表達式來查找信息,這些表達式有很多種組成方式。

結點元素的查找是你將要碰到的最頻繁的查找方式。在上面這個XML文檔例子中,根HD包含disk結點。你可以使用路徑來查找這些結點,用正斜杠(/)來分隔子結點,返回所有與模式相匹配的元素。下面的XPATH 語句返回所有的disk元素:

/HD/disk

"*"代表"全部"的意思。/HD/* 代表HD下的全部節點。

下面的XPATH將返回任意節點下的名稱為disk的全部節點:

//disk

下面的XPATH將返回名稱為disk,name屬性為'C'的全部節點:

/HD/disk[@name='C']

節點的附加元素,比如屬性,函數等都要用方括號擴起來,屬性前面要加上@號

下面的XPATH將返回文件個數為1580的files節點:

/HD/disk/files[text()='1580']

大家注意到上面包含一個text(),這就是XPATH的一個函數,它的功能是取出當前節點的文本。

下面的XPATH將返回文件個數為1580的分區:

/HD/disk/files[text()='1580']/parent::*

最后的parent::*表示這個元素的所有的父節點的集合。

XPATH中一些有用的函數:

string concat (string, string, string*)聯接兩個字符串
boolean starts-with (string, string)判斷某字符串是否以另一字符串開頭
boolean contains (string, string)判斷某字符串是否包含另一字符串
string substring (string, number, number)取子字符串
number string-length (string)測字符串長度
number sum (node-set)求和
number floor (number)求小于此數的最大整數值
number ceiling (number)求大于此數最小整數值

XPATH具有豐富的表達功能,上面這些已經基本夠用,在你做項目中就會發現根據實際情況有許多查詢需求,你應該參考本文最后提供的W3C發布的關于XAPH的官方資料進行查閱,我在這里只起一個拋磚引玉的作用,在下面的章節中,我們的應用范例將不會超出上面提到的這些內容,如果你對XPATH感興趣,應該在讀完本文后,查找相關資料和書籍進行深入學習。

?



回頁首

?

JDOM修煉篇

?

用過XERCES的程序員都會感到,有時候用一句話就可以說清楚的事,當用XERCES的API來實現時,要三四行程序。

?



回頁首

?

獲得并安裝JDOM

?

http://www.jdom.org/可以下載JDOM的最新版本,將壓縮包中的jdom.jar及lib目錄下的全部jar包加入到classpath就可以了。

?



回頁首

?

用JDOM解析XML

?

JDOM模型的全部類都在org.jdom.*這個包里,org.jdom.input.*這個包里包含了JDOM的解析器,其中的DOMBuilder的功能是將DOM模型的Document解析成JDOM模型的Document;SAXBuilder的功能是從文件或流中解析出符合JDOM模型的XML樹。由于我們的上面提到的XML樣例存儲在一個名稱為sample.xml的文件中,很顯然我們應該采用后者作為解析工具。下面程序演示了jdom的基本功能,即解析一個xml文檔,并挑選一些內容輸出到屏幕上。

import java.util.*; import org.jdom.*; import org.jdom.input.SAXBuilder; public class Sample1 {public static void main(String[] args) throws Exception{ SAXBuilder sb=new SAXBuilder();Document doc=sb.build("sample.xml");Element root=doc.getRootElement();List list=root.getChildren("disk");for(int i=0;i<list.size();i++){Element element=(Element)list.get(i);String name=element.getAttributeValue("name");String capacity=element.getChildText("capacity");String directories=element.getChildText("directories");String files=element.getChildText("files");System.out.println("磁盤信息:");System.out.println("分區盤符:"+name);System.out.println("分區容量:"+capacity);System.out.println("目錄數:"+directories);System.out.println("文件數:"+files);System.out.println("-----------------------------------");}?? } }

?

程序的輸出結果:

磁盤信息: 分區盤符:C 分區容量:8G 目錄數:200 文件數:1580 ----------------------------------- 磁盤信息: 分區盤符:D 分區容量:10G 目錄數:500 文件數:3000 -----------------------------------

?

這段程序采用了傳統的解析方式,一級一級的從根節點到子節點逐個采集我們所需要的數據,中規中矩。試想如果這個樹足夠深,我們想取第5 0層第三個節點的數據(夸張了點,呵呵),那將是一場噩夢!下面的內容將輕松化解你的這一痛苦。

?



回頁首

?

JDOM+XPATH進階篇

?

說了那么多JDOM和XPATH的好處,終于到了英雄有用武之地的時候了。

JDOM的關于XPATH的api在org.jdom.xpath這個包里。看看這個包下,只有一個類,JDOM就是如此簡潔,什么事都不故弄玄虛的搞得那么復雜。這個類中的核心的api主要是兩個selectNodes()和selectSingleNode()。前者根據一個xpath語句返回一組節點;后者根據一個xpath語句返回符合條件的第一個節點。

下面的程序我們用JDOM+XPATH實現了上一個程序同樣的功能,你可以從中學到不少運用XPATH 的知識:

import java.util.*; import org.jdom.*; import org.jdom.input.SAXBuilder; import org.jdom.xpath.XPath; public class Sample2 {?? public static void main(String[] args) throws Exception {SAXBuilder sb = new SAXBuilder();Document doc = sb.build("sample.xml");Element root = doc.getRootElement();List list = XPath.selectNodes(root, "/HD/disk");for (int i = 0; i > list.size(); i++) { Element disk_element = (Element) list.get(i);String name = disk_element.getAttributeValue("name");String capacity = ( (Text) XPath.selectSingleNode(disk_element, "//disk[@name='" + name + "']/capacity/text()")).getTextNormalize();String directories = ( (Text) XPath.selectSingleNode(disk_element,?? "//disk[@name='" + name + "']/directories/text()")).getTextNormalize();String files = ( (Text) XPath.selectSingleNode(disk_element,?? "//disk[@name='" + name + "']/files/text()")).getTextNormalize();System.out.println("磁盤信息:");System.out.println("分區盤符:" + name);System.out.println("分區容量:" + capacity);System.out.println("目錄數:" + directories);System.out.println("文件數:" + files);System.out.println("-----------------------------------");}} }

?

輸出結果:

磁盤信息: 分區盤符:C 分區容量:8G 目錄數:200 文件數:1580 ----------------------------------- 磁盤信息: 分區盤符:D 分區容量:10G 目錄數:500 文件數:3000 -----------------------------------

總結

以上是生活随笔為你收集整理的JDOM/XPATH编程指南的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 福利视频二区 | 捆绑裸体绳奴bdsm亚洲 | 亚洲aaa | 轻点好疼好大好爽视频 | 欧美精品卡一卡二 | 在线免费观看黄 | 看国产一级片 | 日本做爰全过程免费看 | 亚洲精品少妇一区二区 | 欧美xxxxxxxxx| 人禽高h交 | 中文字幕有码在线视频 | 山村大伦淫第1部分阅读小说 | 亚洲一区二区在线免费 | 大地资源影视在线播放观看高清视频 | 少妇性生活视频 | 欧美日本一区二区 | 伊人射 | 中国美女黄色一级片 | 五月天激情丁香 | a级黄色网 | 青娱乐精品视频 | 97超级碰碰 | 午夜av在线免费观看 | 国产精品美女在线观看 | 国产又粗又大又爽视频 | 中文字幕丰满孑伦无码专区 | 温柔少妇的高潮呻吟 | 六月婷婷中文字幕 | 精品中文字幕一区二区三区 | 美国av片| 2019天天干天天操 | 影视av | 亚洲制服av | www.99视频| 亚洲第一中文字幕 | 日韩欧美国产网站 | 精品中文字幕一区二区 | 电影《两个尼姑》免费播放 | 欧美日韩三级在线 | 黄色三级a| 黄色字幕网 | 在线观看高清视频 | 各种含道具高h调教1v1男男 | 青苹果av | 一区成人 | 国产有码在线 | 日本高清视频一区二区 | 加勒比综合网 | 国产成人精品免费视频 | 女女爱爱视频 | 一区二区三区视频播放 | 日韩免费成人 | 大尺度在线观看 | 精品无码av一区二区三区不卡 | 91久久国产综合久久91精品网站 | 色婷婷综合视频 | 免费99精品国产自在在线 | 亚洲国产精品无码久久久 | 成人一二区 | av三级| 亚洲精品一区二区三区影院忠贞 | 日韩性xxx | 调教小屁屁白丝丨vk | 精品中文字幕一区二区 | 激情婷婷综合网 | 亚洲熟悉妇女xxx妇女av | 国产第一亚洲 | 久久精品色妇熟妇丰满人妻 | 亚洲一级在线 | 国产免费av网站 | 欧美一区二区在线播放 | 午夜一级在线 | 色一情一交一乱一区二区三区 | 日本蜜桃视频 | 一区二区一级片 | 欧美成人精品欧美一级乱 | 97久久人澡人人添人人爽 | 欧美人体视频 | 蜜臀一区二区三区精品免费视频 | 男人天堂视频网站 | 亚洲精品国产精品国 | 欧美操穴视频 | 一区二区三区视频播放 | 超碰日韩在线 | 国产视频二区三区 | 国产欧美一区二区在线观看 | 午夜剧场黄色 | 操操操网站 | 午夜污污| 午夜丁香网 | 成人福利一区二区 | 亚洲乱码久久 | 伊人自拍 | 亚洲精品麻豆 | www天天操 | 国产精品无码永久免费不卡 | 80日本xxxxxxxxx96 亚洲国产精品视频在线 | 午夜视频在线网站 |