版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1,XML程序設(shè)計(jì)第8章,XPath語言,2,主要內(nèi)容XPath簡介Node節(jié)點(diǎn)XPath路徑表達(dá)式的結(jié)構(gòu)謂詞節(jié)點(diǎn)集上使用謂詞節(jié)點(diǎn)集的并運(yùn)算JavaXPathAPI節(jié)點(diǎn)集與函數(shù)編譯XPath路徑表達(dá)式應(yīng)用實(shí)例-圖書查詢難點(diǎn)XPath路徑表達(dá)式的結(jié)構(gòu)謂詞,第8章導(dǎo)讀,3,概述,W3C在1999年推出XMLPathLanguage(XPath)Version1.0規(guī)范,簡稱XPath1.0語言規(guī)范。2007年推出XPath2.0語言規(guī)范。使用XPath可以很容易地編寫查詢XML中數(shù)據(jù)的XPath路徑表達(dá)式,XPath語言為應(yīng)用程序從XML文件中獲得所需要的特殊數(shù)據(jù)提供了更加方便、快捷的語法,XPa
2、th的作用非常類似SQL語言在關(guān)系數(shù)據(jù)庫中的地位。,4,8.1XPath簡介,XPath語言的核心是給出用于從XML文件中查找標(biāo)記的語法規(guī)則,即編寫XPath路徑表達(dá)式,以便使應(yīng)用程序更加方便、快捷地從XML文件中檢索到所需要的數(shù)據(jù)。,5,8.1.1初識(shí)XPath路徑表達(dá)式,一個(gè)XPath路徑表達(dá)式,簡稱XPath表達(dá)式,由若干個(gè)“定位步”所構(gòu)成。例題8.1p187針對(duì)上例中的XML文件的XPath路徑表達(dá)式:/學(xué)生列表/學(xué)生/姓名返回example8_1.xml中與該XPath路徑表達(dá)式匹配的所有標(biāo)記,即返回example8_1.xml文件中的所有名字為“姓名”的標(biāo)記。下面的XPath路徑表
3、達(dá)式:/學(xué)生列表/學(xué)生2/姓名返回example8_1.xml文件中第2個(gè)名稱為“學(xué)生”標(biāo)記中的所有“姓名”子標(biāo)記。XPath路徑表達(dá)式的核心是給出一個(gè)匹配XML文件中標(biāo)記的模式,也可以說XPath路徑表達(dá)式的核心是用于表示滿足一定條件的標(biāo)記所組成的集合。,6,8.1.2使用XPathAPI,使用JavaXPathAPI處理XPath路徑表達(dá)式的步驟如下:1使用javax.xml.xpath包中的XPathFactory類調(diào)用其類方法newInstance()實(shí)例化一個(gè)XPathFactory對(duì)象,如:XPathFactoryxPathFactory=XPathFactory.newInsta
4、nce();2步驟1中得到的XPathFactory對(duì)象調(diào)用newXPath()方法返回一個(gè)XPath對(duì)象,如:XPathxPath=xPathFactory.newXPath();3使用org.xml.sax包中的InputSource類將XML文件封裝到一個(gè)InputSource對(duì)象中,如:InputSourcesource=newInputSource(student.xml);4在第2步驟獲得的XPath對(duì)象調(diào)用evaluate()方法來計(jì)算XPath路徑表達(dá)式,如:NodeListnodelist=(NodeList)xPath.evaluate(學(xué)生列表/學(xué)生2/姓名,source
5、,XPathConstants.NODESET);,7,8.2Node節(jié)點(diǎn),XPath語言把XML文件中的標(biāo)記、標(biāo)記包含文本等組成的數(shù)據(jù)結(jié)構(gòu)看作是一個(gè)樹形結(jié)構(gòu),即將XML文件看作是由Node類型節(jié)點(diǎn)構(gòu)成的樹。Node節(jié)點(diǎn)由可細(xì)分為Document,Element,Text,Attribue,ProcessingInstruction和Namespace節(jié)點(diǎn)。,8,8.2.1節(jié)點(diǎn)之間的關(guān)系,樹形結(jié)構(gòu)中的各個(gè)節(jié)點(diǎn)按其在樹中的位置形成各種關(guān)系,比如一個(gè)節(jié)點(diǎn)是另一個(gè)節(jié)點(diǎn)的子節(jié)點(diǎn)等。和通常樹形結(jié)構(gòu)數(shù)據(jù)中使用的術(shù)語一樣,XPath語言也經(jīng)常使用下列表明節(jié)點(diǎn)之關(guān)系的術(shù)語:子節(jié)點(diǎn),父節(jié)點(diǎn)、子孫節(jié)點(diǎn)、祖先節(jié)點(diǎn),
6、兄節(jié)點(diǎn)、弟節(jié)點(diǎn),兄弟節(jié)點(diǎn)等。,9,8.2.2節(jié)點(diǎn)的類型_1,Path語言將XML文件看作是由Node類型節(jié)點(diǎn)構(gòu)成的樹,而且Node類型節(jié)點(diǎn)還可細(xì)分為Document,Element,Text,Attribute,ProcessingInstruction和Namespace等節(jié)點(diǎn)。XPath將下面的文件employee.xml(見190頁)看作是一個(gè)如圖8.2所示的樹形結(jié)構(gòu)。,10,8.2.2節(jié)點(diǎn)的類型_2,1Document(文檔)節(jié)點(diǎn)XPath語言將整個(gè)XML文件看作是一個(gè)樹形結(jié)構(gòu)的數(shù)據(jù),并把XML文件作為該樹的根節(jié)點(diǎn),而且這個(gè)根節(jié)點(diǎn)的類型是Document類型的節(jié)點(diǎn)。2Element(元
7、素)節(jié)點(diǎn)XPath語言將XML文件中的每個(gè)標(biāo)記看作是一個(gè)Element節(jié)點(diǎn)。3Text(文本)節(jié)點(diǎn)XPath語言將XML文件中標(biāo)記中包含的文本作是一個(gè)Text節(jié)點(diǎn),而且該Text節(jié)點(diǎn)包含的文本內(nèi)容就是它所對(duì)應(yīng)的文本。4Attribute(屬性)節(jié)點(diǎn)XPath語言將XML文件中標(biāo)記含有的屬性看作是一個(gè)Attribute節(jié)點(diǎn)。5ProcessingInstruction(操作指令)節(jié)點(diǎn)XPath語言將XML文件中操作指令看作是一個(gè)ProcessingInstruction節(jié)點(diǎn)。6Namespace節(jié)點(diǎn)XPath語言將XML文件中標(biāo)記的的開始標(biāo)簽中聲明的名稱空間看作是一個(gè)Namespace節(jié)點(diǎn),該節(jié)
8、點(diǎn)的名字就是名稱空間的前綴,節(jié)點(diǎn)包含的文本內(nèi)容就是名稱空間的名字。7Comment(注釋)節(jié)點(diǎn)XPath語言將XML文件中注釋看作是一個(gè)Comment節(jié)點(diǎn),注釋節(jié)點(diǎn)包含的文本內(nèi)容就是注釋中的內(nèi)容。,11,8.2.3節(jié)點(diǎn)的名字與值,JavaAPathAPI使用對(duì)應(yīng)的接口或類和XPath規(guī)范中的節(jié)點(diǎn)類型相對(duì)應(yīng),節(jié)點(diǎn)常用的以下3個(gè)方法獲取和它有關(guān)信息。,12,8.3XPath路徑表達(dá)式的結(jié)構(gòu),一個(gè)XPath路徑表達(dá)式由若干個(gè)“定位步”構(gòu)成,一個(gè)XPath路徑表達(dá)式將返回一個(gè)節(jié)點(diǎn)集,即XPath路徑表達(dá)式的核心是表示滿足一定條件的標(biāo)記所組成的集合。,13,8.3.1絕對(duì)路徑與相對(duì)路徑,XPath路徑表
9、達(dá)式由若干“定位步”從左向右用“/”連接而構(gòu)成。XPath路徑表達(dá)式分為絕對(duì)路徑和相對(duì)路徑,從根節(jié)點(diǎn)開始(Document節(jié)點(diǎn))的路徑表達(dá)式稱做絕對(duì)路徑,否則稱為相對(duì)路徑。例題8.3p192,14,8.3.2定位步與節(jié)點(diǎn)集,1定位步“定位步”是構(gòu)成XPath的基本單位,用于確定出相應(yīng)的若干個(gè)節(jié)點(diǎn),一個(gè)定位步由軸(axis)、節(jié)點(diǎn)測(cè)試(nodetest)和可選的謂詞所構(gòu)成。定位步的格式:軸:節(jié)點(diǎn)測(cè)試謂詞2定位步與節(jié)點(diǎn)的尋找定位步的作用找出節(jié)點(diǎn)。定位步中的軸的作用是在樹形結(jié)構(gòu)數(shù)據(jù)中給出尋找Node節(jié)點(diǎn)的方向;節(jié)點(diǎn)測(cè)試的作用是給出尋找的Node節(jié)點(diǎn)應(yīng)當(dāng)屬于哪種細(xì)分的類型;謂詞的作用是給出所尋找的節(jié)點(diǎn)
10、所需要滿足的進(jìn)一步的條件(定位步的謂詞是可選項(xiàng))。3XPath路徑表達(dá)式與節(jié)點(diǎn)集XPath路徑表達(dá)式由若干“定位步”從左向右用“/”連接而構(gòu)成。XPapth路徑表達(dá)式尋找出的節(jié)點(diǎn)集也稱作XPapth路徑表達(dá)式返回的節(jié)點(diǎn)集,或XPapth路徑表達(dá)式的“值”。,15,8.3.4節(jié)點(diǎn)測(cè)試,Path路徑表達(dá)式由若干“定位步”從左向右用“/”連接而構(gòu)成路徑,而定位步又是由軸(axis)、節(jié)點(diǎn)測(cè)試(nodetest)和可選的謂詞所構(gòu)成。使用定位步的當(dāng)前節(jié)點(diǎn)根據(jù)軸確定所尋找的節(jié)點(diǎn)的方向,根據(jù)節(jié)點(diǎn)測(cè)試確定所尋找的節(jié)點(diǎn)的具體類型。一個(gè)節(jié)點(diǎn)測(cè)試可以是標(biāo)記的名字、text()、node()或comment()等。例
11、題8.5,例題8.6p198,16,8.4謂詞,“定位步”是構(gòu)成XPath的基本單位,用于確定出相應(yīng)的若干個(gè)節(jié)點(diǎn),一個(gè)定位步由軸(axis)、節(jié)點(diǎn)測(cè)試(nodetest)和可選的謂詞所構(gòu)成。定位步的格式:軸:節(jié)點(diǎn)測(cè)試謂詞謂詞(Predicates)是定位步中最吸引人的部分。,17,8.3.3軸以及縮寫,XPath路徑表達(dá)式中的定位步使用軸來定位節(jié)點(diǎn),而節(jié)點(diǎn)的具體類型由節(jié)點(diǎn)測(cè)試負(fù)責(zé)。例題8.4p197,18,8.4.1謂詞的格式與作用,謂詞的目的是給出定位步所尋找出的節(jié)點(diǎn)需滿足的進(jìn)一步條件,即當(dāng)前節(jié)點(diǎn)在使用定位步的軸和節(jié)點(diǎn)測(cè)試找出若干個(gè)節(jié)點(diǎn)后,再使用謂詞從這些節(jié)點(diǎn)中篩選出滿足謂詞條件的節(jié)點(diǎn)。謂詞
12、是用一對(duì)中括號(hào)擴(kuò)起的條件表達(dá)式,謂詞格式是:條件表達(dá)式使用帶有謂詞定位步:軸:節(jié)點(diǎn)測(cè)試謂詞的當(dāng)前節(jié)點(diǎn)首先根據(jù)軸和節(jié)點(diǎn)測(cè)試尋找出若干個(gè)節(jié)點(diǎn),然后從這些節(jié)點(diǎn)中再篩選出滿足謂詞條件的節(jié)點(diǎn),即篩選出使得謂詞中條件表達(dá)式為true的節(jié)點(diǎn)。例題8.6p198,19,8.4.2尋找特殊位置的節(jié)點(diǎn),在謂詞中使用position()和last()函數(shù)可以尋找指定位置上的節(jié)點(diǎn)。例如,對(duì)于定位步:軸:節(jié)點(diǎn)測(cè)試position()=2(縮寫:軸:節(jié)點(diǎn)測(cè)試謂詞2)使用該定位步的當(dāng)前節(jié)點(diǎn)所尋找的是滿足軸和節(jié)點(diǎn)測(cè)試的全部節(jié)點(diǎn)中的第2個(gè)節(jié)點(diǎn)。例題8.6p198,20,8.4.3尋找有特殊屬性的節(jié)點(diǎn),在謂詞中使用attribu
13、e軸或?qū)ふ揖哂兄付▽傩曰驅(qū)傩灾档墓?jié)點(diǎn)。1.尋找具有指定屬性和屬性值的節(jié)點(diǎn)如果要尋找具有指定屬性的節(jié)點(diǎn),可以在謂詞中使用:attribue:屬性名1邏輯關(guān)系符attribue:屬性名n或使用縮寫:屬性名1邏輯關(guān)系符屬性名n2.使用contains函數(shù)如果希望尋找具有指定屬性,并且屬性值中含有指定的字符串時(shí),就可以在謂詞中使用contains函數(shù),格式是:contains(屬性名,特定字符串)例題8.6p198,21,8.4.4尋找有特殊關(guān)系節(jié)點(diǎn)的節(jié)點(diǎn),1.尋找具有特殊關(guān)系節(jié)點(diǎn)的節(jié)點(diǎn)如果要尋找具有特殊關(guān)系節(jié)點(diǎn)的節(jié)點(diǎn),但對(duì)該特殊關(guān)系節(jié)點(diǎn)包含的內(nèi)容沒有特殊的要求,可以在謂詞中使用:軸:特殊關(guān)系節(jié)點(diǎn)名稱
14、1邏輯關(guān)系符軸:特殊關(guān)系節(jié)點(diǎn)名稱2軸:特殊關(guān)系節(jié)點(diǎn)名稱n那么滿足該謂詞條件的節(jié)點(diǎn)必須和謂詞中的節(jié)點(diǎn)形成軸所指定的特殊關(guān)系。例題8.6p1982.使用contains函數(shù)如果希尋找具有特殊關(guān)系節(jié)點(diǎn)的節(jié)點(diǎn)且特殊關(guān)系節(jié)點(diǎn)包含的文本需要含有指定的字符串時(shí),就可以在謂詞中使用contains函數(shù),格式是:contains(軸:節(jié)點(diǎn)名稱,特定字符串)例題8.6p198,22,8.4.5使用謂詞嵌套尋找節(jié)點(diǎn),謂詞的作用是給出節(jié)點(diǎn)需滿足的進(jìn)一步條件,因此允許謂詞中繼續(xù)使用謂詞。例如,對(duì)于謂詞:節(jié)點(diǎn)名屬性名=特定值那么滿足上述謂詞的節(jié)點(diǎn)需要有指定名字的子節(jié)點(diǎn),而且子節(jié)點(diǎn)必須有指定的屬性名和特定的屬性值。例如,對(duì)
15、于謂詞:following:節(jié)點(diǎn)名屬性名=特定值滿足上述謂詞的節(jié)點(diǎn)需要有指定名字的弟節(jié)點(diǎn),而且弟節(jié)點(diǎn)必須有指定的屬性名和屬性值。例如,對(duì)于謂詞:descendant:節(jié)點(diǎn)名屬性名=特定值滿足上述謂詞的節(jié)點(diǎn)需要有指定名字的子孫節(jié)點(diǎn),而且子孫節(jié)點(diǎn)必須有指定的屬性名和特定的屬性值。例題8.6p198,23,8.5節(jié)點(diǎn)集上使用謂詞,“XPath允許在XPath絕對(duì)路徑最后尋找出的節(jié)點(diǎn)集上使用謂詞,其作用是從當(dāng)前節(jié)點(diǎn)集中篩選、過濾出所需要的節(jié)點(diǎn),即從當(dāng)前節(jié)點(diǎn)集中篩選、過濾出一個(gè)子集。其使用格式是:(絕對(duì)路徑)謂詞例題8.6p198,24,8.6節(jié)點(diǎn)集的并運(yùn)算,XPath語言允許將多個(gè)XPath路徑表達(dá)式
16、尋找出的節(jié)點(diǎn)集合使用“|”進(jìn)行集合的并運(yùn)算,所得到的節(jié)點(diǎn)集中的節(jié)點(diǎn)按著節(jié)點(diǎn)在XML中的對(duì)應(yīng)的標(biāo)記或文本出現(xiàn)的先后順序排列。例題8.6p198,25,8.7JavaXPathAPI,在本章前面的8.1.2節(jié)介紹了怎樣使用JavaXPathAPI處理XPath路徑表達(dá)式,其關(guān)鍵是使用JavaXPathAPI提供的XPath對(duì)象調(diào)用evaluate()方法來計(jì)算XPath路徑表達(dá)式。XPath對(duì)象的evaluate()方法的常用格式如下:Objectevaluate(Stringexpression,InputSourcesource,QNamereturnType),26,8.7.1按NodeSe
17、t計(jì)算,當(dāng)XPath對(duì)象調(diào)用:evaluate(Stringexpression,InputSourcesource,QNamereturnType)方法,并將參數(shù)returnType可以取值為:XPathConstants.NODESET時(shí),evaluate方法計(jì)算的結(jié)果是org.w3c.dom包中的一個(gè)NodeList對(duì)象,即evaluate方法返回org.w3c.dom包中的一個(gè)NodeList對(duì)象,該NodeList對(duì)象是由org.w3c.dom包中Node對(duì)象組成的一個(gè)節(jié)點(diǎn)集。,27,8.7.2按Node計(jì)算,當(dāng)XPath對(duì)象調(diào)用evaluate(Stringexpression,I
18、nputSourcesource,QNamereturnType)方法,并將參數(shù)returnType可以取值為:XPathConstants.NODE時(shí),evaluate方法計(jì)算的結(jié)果是org.w3c.dom包中的一個(gè)Node對(duì)象,即evaluate方法返回org.w3c.dom包中的一個(gè)Node對(duì)象,該Node對(duì)象對(duì)應(yīng)著XPath路徑表達(dá)式expression返回的節(jié)點(diǎn)集中的第一個(gè)節(jié)點(diǎn)。例題8.7p211,28,8.7.3按字符串計(jì)算,當(dāng)XPath對(duì)象調(diào)用evaluate(Stringexpression,InputSourcesource,QNamereturnType)方法,并將參數(shù)re
19、turnType可以取值為:XPathConstants.String時(shí),evaluate方法計(jì)算的結(jié)果是一個(gè)String對(duì)象,即evaluate方法返回一個(gè)String對(duì)象,該String對(duì)象對(duì)應(yīng)著XPath路徑表達(dá)式expression返回的節(jié)點(diǎn)集中的第一個(gè)節(jié)點(diǎn)包含的文本。例題8.8p212,29,8.7.4按布爾值計(jì)算,當(dāng)XPath對(duì)象調(diào)用evaluate(Stringexpression,InputSourcesource,QNamereturnType)方法,并將參數(shù)returnType可以取值為:XPathConstants.BOOLEAN時(shí),evaluate方法計(jì)算的結(jié)果是一個(gè)B
20、oolean對(duì)象,即evaluate方法返回一個(gè)Boolean對(duì)象。例題8.8p212,30,8.7.5按數(shù)值計(jì)算,當(dāng)XPath對(duì)象調(diào)用evaluate(Stringexpression,InputSourcesource,QNamereturnType)方法,并將參數(shù)returnType可以取值為:XPathConstants.NUMBER時(shí),evaluate方法計(jì)算的結(jié)果是一個(gè)Double對(duì)象,即evaluate方法返回一個(gè)Double對(duì)象,該Double對(duì)象對(duì)應(yīng)著XPath路徑表達(dá)式expression返回的節(jié)點(diǎn)集中的第一個(gè)節(jié)點(diǎn)包含的文本所轉(zhuǎn)換的Doube對(duì)象,如果文本內(nèi)容無法轉(zhuǎn)化為Double對(duì)象,evaluate方法返回:NaN,表示沒有這樣的數(shù)字。例題8.9p213,31,8.8節(jié)點(diǎn)集與函數(shù),XPath語言給出了幾個(gè)作用與節(jié)點(diǎn)集上的函數(shù)。1count(node-set)函數(shù)count(node-set)函數(shù)返回參數(shù)指定的節(jié)點(diǎn)集中的節(jié)點(diǎn)的個(gè)數(shù),例如count(/列車時(shí)刻表/列車/始發(fā)時(shí)間)返回的值是2。2id(object)函數(shù)ID類型的屬性的屬性值具有互斥性,即所有ID類型的屬性的屬性值必須互不相同。如
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- BIM項(xiàng)目進(jìn)度計(jì)劃制定方案
- 綠色能源轉(zhuǎn)換技術(shù)方案
- 家庭采光設(shè)計(jì)方案
- 2026年考古文物保護(hù)文物儲(chǔ)藏區(qū)雙人雙鎖管理機(jī)制研究論文題目
- 中小學(xué)教師職稱評(píng)聘工作實(shí)施方案(2026年修訂)詳細(xì)版
- 2026年汽車行業(yè)安全風(fēng)險(xiǎn)防范知識(shí)測(cè)試題
- 2026年?duì)I養(yǎng)師職業(yè)資格考試模擬題集
- 2026年稅務(wù)法規(guī)與稅收優(yōu)惠政策模擬題
- 2026年證券從業(yè)資格考題庫金融市場(chǎng)基礎(chǔ)知識(shí)
- 海南封關(guān)離岸金融中心建設(shè)進(jìn)展
- 工廠裝修吊頂施工實(shí)施方案
- 墓碑銷售合同范本
- 眾籌服裝店合同范本
- 放射科技師年度工作總結(jié)
- 公司職業(yè)病防治宣傳教育培訓(xùn)制度范文
- 涉案資金與保證金監(jiān)管系統(tǒng)建設(shè)方案
- 脫硫用石灰石粉加工項(xiàng)目可行性實(shí)施報(bào)告
- 義務(wù)教育數(shù)學(xué)課程標(biāo)準(zhǔn)(2025年版)
- 《立體裁剪》課件-9.女大衣立體裁剪
- 人教版四年級(jí)數(shù)學(xué)上學(xué)期期末沖刺卷(B)(含答案)
- 2025年6月上海市高考語文試題卷(含答案詳解)
評(píng)論
0/150
提交評(píng)論