You are on page 1of 21

Gii thiu v XPath http://kieutrongkhanh.net/index.php/xml-a-java/89-gii-thiu-v-xpath?tmpl=...

Gii thiu v XPath


Category: XML & Java
Hits: 9003
Gii thiu v XPath 0

Mc ch: Ch ca bi ny gii thiu XPath, mt thnh phn h tr gip truy xut thng tin
trong tp tin XML lm tin cho vic p dng stylesheet kt hp XML to ra kt xut ty theo
yu cu. Bn cnh XPath cng lm nn tng cho vic h tr truy vn parsing d liu ca ti
liu XML cc k nhanh chng hiu qu. Hn th na, XPath h tr nn tng to ra XQuery p
dng trong truy vn d liu tng t nh truy vn SQL trn c s d liu
Yu cu v kin thc c bn
Nm vng cc khi nim v XML v cch vit ti liu XML well-formed (tham kho li bi Gii thiu v XML nh
ngha, cch vit XML ng c php (XML well-formed))
Nm vng cc khi nim v namespace v cch s dng namespace trong ti liu XML (tham kho li bi S dng
XML vi namespace S dng kt hp nhng ti liu XML vi nhau t nhiu ngi nh ngha khc nhau)
Nm vng khi nim v ngn ng lp trnh Java, lp trnh thao tc hng i tng, s dng cc method hay function
vit v kim tra mt ti liu XML well-formed
Nm vng v s dng tt ngn ng truy vn SQL trn cc trnh qun l c s d liu quan h
Tng quan XPath
Xpath l mt trong ba thnh phn trong ngn ng XSL Extensible Style Language
L ngn ng h tr tm kim thng tin trong ti liu XML qua vic s dng biu thc XPath nh hng tm kim d
liu trn XML thay v phi thc hin tm kim qui duyt cy XML
Xpath nh ngha 7 loi nodes theo m hnh th hin bn di t root, element, attribute, text, namespace, processing-
instruction v comment tng t nh khi nim v cu trc ti liu XML m chng ti gii thiu trong bi Gii thiu
v XML nh ngha, cch vit XML ng c php (XML well-formed)

1 of 21 1/10/2017 11:46 AM
Gii thiu v XPath http://kieutrongkhanh.net/index.php/xml-a-java/89-gii-thiu-v-xpath?tmpl=...

Ngoi ra, Xpath cn nh ngha mt s node c bit th hin mi quan h gia cc node trong m hnh trong qu
trnh x l nh sau
Parent Node: node trn trc tip ca node hin hnh
Child Node: tp node trc tip ca node hin hnh cp thp hn
Sibling: node ngang hng hay cng cha vi node hin hnh
Ancestors: tt c node con bn trn node hin hnh cng nhnh
Descendants: tt c node con bn di ca node hin hnh cng nhnh
Xpath Data Model c nh ngha l duyt ton b cy ni dung XML v chuyn i mapping chng thnh 7 loi
node m t trn v XPath thc hin truy vn trn ni dung cy XML c to ra.
Mi node trong XPath u c gi tr kiu chui cha thng tin ca mt node bao gm localname v namespace nu c
c th truy vn n node trong m hnh mt cch d dng thng qua tn
C php ca XPath
truy vn vi ng dn tuyt i ngha l i t root ca ti liu XML n cc thnh phn cn truy cp, XPath qui
nh vi c php bt u bng du /
truy vn vi ng dn tng i c th truy cp n thnh phn bt k tha iu kin, XPath qui nh c php
s dng vi du //
truy vn n mt thnh phn bt k m khng cn bit tn ca n l g, XPath qui nh k t s dng l *
truy cp thuc tnh ca mt node, XPath qui nh thuc tnh truy vn phi c c php bt u l @. V d
@tnThucTnh
truy cp n gi tr ca mt bin c nh ngha, XPath qui nh bin truy vn phi c c php bt u l $. V
d $tnBin
iu kin khi truy vn c t trong du []
Truy vn la chn nodes

Biu thc nh ngha


tnNode Chn tt c cc node con ca tnNode
/ Chn tt c cc node tnh t root
// Chn tt c node tnh t node hin hnh
. Chn node hin hnh
.. Chn node cha ca node hin hnh

Cc php ton c s dng trong XPath


i s: +, -, * (nhn), div (chia thp phn), mod (chia ly d)
So Snh hay quan h: =, != (khc), <, <=, >, >=
Lun l: true, false, and, or, not
Kt hp: | (hi)
Cc thnh phn h tr truy vn mi quan h gia cc node trong ti liu XML (Axes)
C php: TnAxis::tnNode

2 of 21 1/10/2017 11:46 AM
Gii thiu v XPath http://kieutrongkhanh.net/index.php/xml-a-java/89-gii-thiu-v-xpath?tmpl=...

Axis nh ngha
ancestor Chn tt c cc node trn ca node hin hnh
ancestor-or-self Chn tt c cc node trn ca node hin hnh v chnh n
attribute Chn tt c cc thuc tnh ca node hin hnh
child Chn node con ca node hin hnh
descendant Chn tt c cc node di ca node hin hnh
descendant-or-self Chn tt c cc node di ca node hin hnh v chnh n
following Chn tt c cc node sau khi tag ng ca node hin hnh
following-sibling Chn tt c cc node ngang cp sau khi tag ng ca node
hin hnh
namespace Chn tt c namespace ca node hin hnh
parent Chn tt c node cha ca node hin hnh
preceding Chn tt c cc thnh phn trc khi bt u tag m ca
node hin hnh
preceding-sibling Chn tt c cc node ngang hng trc khi bt u tag m
ca node hin hnh
self Chn node hin hnh

Cc functions trong XPath

Hm nh ngha
node-name(node) Tr v tn node ca node c a vo hm
nilled(node) Tr v true nu node l null
data(item, item, ) Ly cc tr tun t ca cc items a vo
base-uri() Ly tr thuc tnh base-uri ca node hin hnh
base-uri(node) Ly tr ca thuc tnh base-uri ca node
document-uri() Ly tr ca thuc tnh document-uri ca ti liu XML
number(arg) Tr v kiu s
abs(num) Ly tr tuyt i
ceiling(num) Ly tr s nguyn nh nht ln hn num
floor(num) Ly tr s nguyn ln nht nh hn num
string(arg) Tr v kiu chui
compare(comp1, So snh gi tr cho comp1 vi comp2, -1 l nh hn, 0 l
comp2) bng nhau v 1 l ln hn

3 of 21 1/10/2017 11:46 AM
Gii thiu v XPath http://kieutrongkhanh.net/index.php/xml-a-java/89-gii-thiu-v-xpath?tmpl=...

concat(string, string, Ni chui


)
substring(string, start Ly chui con trong string a vo
[,len])
string-length([string]) Ly chiu di ca string node hin hnh hay t string
normalize- Loi b k t khong trng tha trong v ngoi chui string
space([string]) ca node hin hnh hay string
normalize-unicode Tng t nh normalize-space nhng dng cho Unicode
translate(string1, Convert chui string1 bng cch thay th chui string3 thay
string2, string3) th chui string 2
contains(string1, Tr ra true nu string1 cha string2
string2)
match(string1, Tr ra true nu string1 tun th ng pattern
pattern)
replace(string1, Thay th chui replace vi thnh phn trong string1 ng
pattern, replace) pattern
tokenize(string, Tng t hm split ca ngn ng java
pattern)
boolean(arg) Convert gi tr arg tr v kiu lun l true hay false
count([node]) Tr v s lng node ca node
last() Tr v node cui cng trong node hin hnh
local-name([node]) Tr v tn node nm sau phn du :
name() Tr v namespace qualified prefix:tnNode
namespace- Tr v uri ca namespace ca node hin hnh hay node
uri([node])
text() Tr v chui tr ca node
position() Tr v v tr ca node

Chng ta hon tt l thuyt c bn ca Xpath.


Vn dng cc kin thc v Schema trn p dng truy vn ti liu XML s dng XPath
hiu r XPath v p dng cho cc ch tip theo v p dng stylesheet v parsing ti
liu XML thng qua mt s v d c th v truy vn Xpath bn di
Yu cu
Nm vng cc khi nim v XML (tham kho li bi Gii thiu v XML nh ngha, cch vit XML ng c php
(XML well-formed))
Nm vng cc khi nim v namespace v cch s dng namespace trong ti liu XML (tham kho li bi S dng
XML vi namespace S dng kt hp nhng ti liu XML vi nhau t nhiu ngi nh ngha khc nhau)

4 of 21 1/10/2017 11:46 AM
Gii thiu v XPath http://kieutrongkhanh.net/index.php/xml-a-java/89-gii-thiu-v-xpath?tmpl=...

Nm vng cc khi nim v Xpath nu trn


Tools s dng y l Netbeans 6.9.1
JDK 6 update 22
Cc bc thc hin
Add plugin h tr kim tra biu thc XPath vo Netbeans 6.9.1
Download gi plugin Xpath ti y vi tn org-sougata-util-nb-xpathev_6.9.1.0.nbm. Tp tin c ui .nbm
Di chuyn n th mc
Windows XP: C:\Documents and Settings\[Tn account login vo windows]\.netbeans\6.9
Windows Vista, 7: C:\Users\[Tn account login vo windows]\.netbeans\6.9
To th mc update
Vo th mc update, to th mc download
Chp tp tin download trn vo trong th mc download.
M li Netbeans 6.9.1, mn hnh update s xut hin, sau netbeans c khi ng nh bnh thng (tp tin nbm
trong th mc download s bin mt)
Mn hnh netbeans vi vic cp thnh cng th hin nh sau

Click vo Xpath, ca s Xpath s m ra

5 of 21 1/10/2017 11:46 AM
Gii thiu v XPath http://kieutrongkhanh.net/index.php/xml-a-java/89-gii-thiu-v-xpath?tmpl=...

Xpath: nhp chui Xpath testing


Resolve namespace automatically: dng p dng cho ti liu c s dng namespace
Return As: chn kt qu truy vn tr v
Node: ly mt node u tin duy nht
NodeList: tp cc node
String: value ca node u tin c truy vn
Number: tr v kiu s tr ca node u tin c truy vn
Boolean: tr v truy vn true nu c node
Nt Evaluate: nhn thc hin truy vn
Ch :
Ti liu XML phi c chn trc hay m trc, sau mi m ca s XPath th mi thc hin truy vn c
Nu m ti liu khng phi XML hay chn ti liu khc trc khi chn ca s XPath, th ngay ti dng evaluate s bo
li
Thc hin v d tm hiu r nh ngha v XPath
Chng ti s s dng ti liu XML u tin khng c namespace thc hin truy vn t c bn n nng cao

6 of 21 1/10/2017 11:46 AM
Gii thiu v XPath http://kieutrongkhanh.net/index.php/xml-a-java/89-gii-thiu-v-xpath?tmpl=...

Chng ta thc hin truy vn u tin vi ch du /

Chng ta c ton b ti liu XML vi du /


Chng ta thc hin truy vn ly tt c quyn sch ca th vin

7 of 21 1/10/2017 11:46 AM
Gii thiu v XPath http://kieutrongkhanh.net/index.php/xml-a-java/89-gii-thiu-v-xpath?tmpl=...

Chng ta nhn thy rng book nm trong library, v library nm di root do vy truy vn ca chng ta nh sau

Kt qu chng ta s c tt c cc node book


Tng t nh th, chng ta truy vn tt c tn tc gi trong th vin

Chng ta thc hin truy vn trc tip author m khng cn thng qua library v book nh truy vn bn di c c
khng?

8 of 21 1/10/2017 11:46 AM
Gii thiu v XPath http://kieutrongkhanh.net/index.php/xml-a-java/89-gii-thiu-v-xpath?tmpl=...

Chng ta nhn c kt qu trng v t root i ra khng c node no tn author nn kt qu tm kim l khng tm thy
hn ch vic s dng ng dn tuyt i v vit qu di dng, chng ta p dng ng dn tng i nh trong l
thuyt thay th nh sau

Chng ta c kt qu tng t
Lu
Khi chng ta dng / th c nhng dng // khng s c li xy ra v tng i l phi ch nh, khng cho php ty

9 of 21 1/10/2017 11:46 AM
Gii thiu v XPath http://kieutrongkhanh.net/index.php/xml-a-java/89-gii-thiu-v-xpath?tmpl=...

Khi chn ti liu khc XML trc khi chn XPath, cho d trn ca s c XML di na chng ta s nhn li nh sau

Chng ta thc hin truy vn vi iu kin tm tt c tn quyn sch c gi ln hn 99


Chng ta dng ng dn tng i v phn tch.
u tin chng ta cn c sch, v c sch mi tnh n gi v gi l node con trong sch
Sau , c sch tha iu kin th chng ta mi lc ra tn
Cu lnh truy vn ca chng ta nh sau

10 of 21 1/10/2017 11:46 AM
Gii thiu v XPath http://kieutrongkhanh.net/index.php/xml-a-java/89-gii-thiu-v-xpath?tmpl=...

Chng ta thc hin v d kt hp hm biu thc vi iu kin tm tt c quyn sch ln hn 30 ng v tn tc gi c


cha ch a
Chng ta s kt hp hm v hm chn la l hm contains tm ch c cha trong chui khc hay khng
Cu lnh truy vn ca chng ta

Trong chui truy vn trn cn lu vic s dng chui phi dng du hay bao tr, nu khng thi XPath s coi tn
nh l node tm kim trong XML
Truy vn tn tc gi c ta sch l Coma

11 of 21 1/10/2017 11:46 AM
Gii thiu v XPath http://kieutrongkhanh.net/index.php/xml-a-java/89-gii-thiu-v-xpath?tmpl=...

Chng ta khng nhn c kt qu v Coma ang tm chnh xc nhng ti liu XML chng ta c cha k t xung dng
v tab, do vy, chng ta cn chun ha chui loi b khong trng trc khi tm kim vi hm normalize-space

Cng vi iu kin trn nhng chng ta ch cn gi tr text khng phi l mt node, chng ta kt hp hm trong truy vn
nh sau

12 of 21 1/10/2017 11:46 AM
Gii thiu v XPath http://kieutrongkhanh.net/index.php/xml-a-java/89-gii-thiu-v-xpath?tmpl=...

Truy vn quyn sch ng th nht trong kt qu tr v

Truy vn quyn sch cui cng trong kt qu truy vn

13 of 21 1/10/2017 11:46 AM
Gii thiu v XPath http://kieutrongkhanh.net/index.php/xml-a-java/89-gii-thiu-v-xpath?tmpl=...

Truy vn quyn sch v tr th 2 trong kt qu tr v

Chng ta c th p dng php ton so snh vi >, <, y iu kin tr nn linh hot
Tm ta quyn sch c id l 618
Chng ta p dng truy vn vi thuc tnh id v dng du @ trong mnh iu kin

14 of 21 1/10/2017 11:46 AM
Gii thiu v XPath http://kieutrongkhanh.net/index.php/xml-a-java/89-gii-thiu-v-xpath?tmpl=...

Tm tn tc gi ca cc quyn sch c thuc tnh saleof


y chng ta khng quan tm tr m quan tm node no c cha thuc tnh, do vy, ch cn ghi thuc tnh l

Chng ta s thc hin truy vn trn ti liu c namespace nh sau

15 of 21 1/10/2017 11:46 AM
Gii thiu v XPath http://kieutrongkhanh.net/index.php/xml-a-java/89-gii-thiu-v-xpath?tmpl=...

16 of 21 1/10/2017 11:46 AM
Gii thiu v XPath http://kieutrongkhanh.net/index.php/xml-a-java/89-gii-thiu-v-xpath?tmpl=...

Chng ta thc hin truy vn tm kim cc lastname ca cc account cn s dng c


Cu lnh truy vn ca chng ta nh sau

Chng ta khng th truy vn c v XPath khng hiu namespace c nh ngha trong ti liu XML, do vy truy vn
s khng tm thy node tn account:allowed v n coi : l mt tn
khc phc chng ta thc hin 02 cch vi cc u khuyt chng ta la chn
Cch 1: check bt Resolve namespace automatically

17 of 21 1/10/2017 11:46 AM
Gii thiu v XPath http://kieutrongkhanh.net/index.php/xml-a-java/89-gii-thiu-v-xpath?tmpl=...

Chng ta c kt qu ng nhng l thuc vo vic thng bo XPath. Cu hi t ra, chng ta mun n uyn chuyn
khng l thuc v chy tt c trn mi ng dng th chng ta s kt hp hm cng mt s php ton v k t c bit
theo cch th 2

Kt qu ra tng t v c nhiu u im hn
Chng ta c th p dng tng t vi hm local-name nh sau

18 of 21 1/10/2017 11:46 AM
Gii thiu v XPath http://kieutrongkhanh.net/index.php/xml-a-java/89-gii-thiu-v-xpath?tmpl=...

Tm tt c name ca cc account khng phn bit l expired hay allowed nhng c balance ln hn 40, trong tn c
cha ch u

Name l mt attribute, do vy, khi s dng chng ta phi dng @


Chng ta c th thc hin cch tng t dng axis

19 of 21 1/10/2017 11:46 AM
Gii thiu v XPath http://kieutrongkhanh.net/index.php/xml-a-java/89-gii-thiu-v-xpath?tmpl=...

Tm kim tt c cc lastname ca cc account c s ln giao dch nhiu hn 02 ln


Chng ta p dng hm count m s transaction ln hn 2. Tuy nhin hm count s tr v node bt u m l
transactions
Do vy, chng ta phi tm node anh em trc n s dng axis
Sau , tm anh em k cn n l lastname
Cu truy vn nh sau

Trn y ch l mt s v d tng quan n chng ta tip cn ni dung XPath v cc thc truy vn ti liu XML. Qu v
cn t nng cao kin thc ca mnh v XPath bng cch t t cu truy vn v thc hin
Chc mng cc bn hon tt v nm cc khi nim v s dng Xpath v ng dng n trong

20 of 21 1/10/2017 11:46 AM
Gii thiu v XPath http://kieutrongkhanh.net/index.php/xml-a-java/89-gii-thiu-v-xpath?tmpl=...

truy vn ti liu XML. Chng ta s p dng n trong cc ni dung tip theo ca ch lin quan
n khi nim v s dng stylesheet cng nh chuyn i nh dng ti liu sang PDF
Rt mong s gp chn thnh v chia s ca qu v v vn ny. Hn gp li qu v cc
ch lin quan n XML, c th s l vn lin quan n vic xy dng XSL
Extensible Style Language p dng truy vn, lc v chuyn i ti liu XML.
0

21 of 21 1/10/2017 11:46 AM

You might also like