欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
JDOM/XPATH編程指南
本文分別介紹了 JDOM 和 XPATH,以及結合兩者進(jìn)行 XML 編程帶來(lái)的好處。

前言

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

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

學(xué)會(huì )JDOM和XPATH,你便不再是XML的入門(mén)者,在未來(lái)的開(kāi)發(fā)生涯中,就像特種兵的多用匕首,為你披荊斬棘,助你勇往直前。閑言少敘,學(xué)習還要腳踏實(shí)地,從頭開(kāi)始。

XPATH速成篇

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

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

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

<?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文檔中使用位置路徑表達式來(lái)查找信息,這些表達式有很多種組成方式。

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

/HD/disk

"*"代表"全部"的意思。/HD/* 代表HD下的全部節點(diǎn)。

下面的XPATH將返回任意節點(diǎn)下的名稱(chēng)為disk的全部節點(diǎn):

//disk

下面的XPATH將返回名稱(chēng)為disk,name屬性為‘C‘的全部節點(diǎn):

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

節點(diǎn)的附加元素,比如屬性,函數等都要用方括號擴起來(lái),屬性前面要加上@號

下面的XPATH將返回文件個(gè)數為1580的files節點(diǎn):

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

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

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

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

最后的parent::*表示這個(gè)元素的所有的父節點(diǎn)的集合。

XPATH中一些有用的函數:

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

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

JDOM修煉篇

用過(guò)XERCES的程序員都會(huì )感到,有時(shí)候用一句話(huà)就可以說(shuō)清楚的事,當用XERCES的API來(lái)實(shí)現時(shí),要三四行程序。

獲得并安裝JDOM

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

用JDOM解析XML

JDOM模型的全部類(lèi)都在org.jdom.*這個(gè)包里,org.jdom.input.*這個(gè)包里包含了JDOM的解析器,其中的DOMBuilder的功能是將DOM模型的Document解析成JDOM模型的Document;SAXBuilder的功能是從文件或流中解析出符合JDOM模型的XML樹(shù)。由于我們的上面提到的XML樣例存儲在一個(gè)名稱(chēng)為sample.xml的文件中,很顯然我們應該采用后者作為解析工具。下面程序演示了jdom的基本功能,即解析一個(gè)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("磁盤(pán)信息:");   System.out.println("分區盤(pán)符:"+name);   System.out.println("分區容量:"+capacity);   System.out.println("目錄數:"+directories);   System.out.println("文件數:"+files);   System.out.println("-----------------------------------");  }   }}                

程序的輸出結果:

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

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

JDOM+XPATH進(jìn)階篇

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

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

下面的程序我們用JDOM+XPATH實(shí)現了上一個(gè)程序同樣的功能,你可以從中學(xué)到不少運用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,     "http://disk[@name=‘" + name + "‘]/capacity/text()")).getTextNormalize();   String directories = ( (Text) XPath.selectSingleNode(disk_element,      "http://disk[@name=‘" + name + "‘]/directories/text()")).getTextNormalize();   String files = ( (Text) XPath.selectSingleNode(disk_element,      "http://disk[@name=‘" + name + "‘]/files/text()")).getTextNormalize();   System.out.println("磁盤(pán)信息:");   System.out.println("分區盤(pán)符:" + name);   System.out.println("分區容量:" + capacity);   System.out.println("目錄數:" + directories);   System.out.println("文件數:" + files);   System.out.println("-----------------------------------");  } }}                

輸出結果:

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

結語(yǔ)

技術(shù)在日新月異的發(fā)展。永遠沒(méi)有學(xué)過(guò)后,便可以一勞永逸的技術(shù)。XML的發(fā)展一日千里。W3C作為INTERNET方面的權威組織指導著(zhù)互聯(lián)網(wǎng)技術(shù)的發(fā)展方向。新技術(shù)的出現大都圍繞著(zhù)W3C制訂的標準,但往往有些“旁門(mén)左道”的另類(lèi)功法卻能產(chǎn)生驚人的殺傷力。JDOM就是這眾多旁門(mén)中的一朵奇葩。就像J2EE大行其道的今天,有許多開(kāi)源組織仍舊在默默的打造著(zhù)自己的獨家兵器,誰(shuí)又能說(shuō)在不久的將來(lái),他們不會(huì )成為劃時(shí)代的創(chuàng )造呢? 君不見(jiàn)Hibernate的興起正在有力的震撼著(zhù)J2EE中EJB架構的基石。只要是成型的框架,必然有薄弱的軟肋。新的技術(shù)只要能攻入對方這一弱點(diǎn),便可在業(yè)界站一席之地。本文只起拋磚引玉的作用,相信讀者在吃過(guò)這道快餐之后,一定會(huì )發(fā)現窗外有更美麗的風(fēng)景等待我們去游歷。

參考資料

關(guān)于作者
薛谷雨是NORDSAN(北京)信息科技開(kāi)發(fā)有限公司高級JAVA研發(fā)工程師,正致力于企業(yè)級異構數據交換的服務(wù)器產(chǎn)品的研發(fā),在J2EE和WEB SERVICE方面有較為豐富的開(kāi)發(fā)經(jīng)驗,你可以通過(guò) rainight@126.com與他取得聯(lián)系。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
用DOM/JDOM解析XML文件(3)
Java程序員從笨鳥(niǎo)到菜鳥(niǎo)之(二十七)XML之Jdom和DOM4J解析
java讀寫(xiě)xml文件的方法
用DOM/JDOM解析XML文件
用JDOM操作XML文件
JAVA解析xml的四種方式比較
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久