c và vit XML DOM vi PHP

c và vit XML DOM vi PHP

 - -!

M

c : Trung bình

Jack Herrington, T

ng biên tp, Code Generation Network

08 01 2010

Các k

thut myriad sn có c và vit XML trong PHP. Bài vit này trình bày ba ph

ng thc c

XML: s

dng th

vin DOM, sdng b phân tích cú pháp SAX, và sdng các biu thc chính quy.

Vi

c vit XML bng cách sdng DOM và khuôn mu vn bn PHP cng s

c cp.

Vi

c c và vit Ngôn ng ánh du M rng (XML) trong PHP hình nh

hi áng ngi. Trong th c t, XML và tt

c

các công ngh liên quan c-a nó có th là nng n. Tuy nhiên, c và vit XML trong PHP không phi là mt tác v

áng ngi. Tr

c tiên, bn c!n phi hc mt chút v XML -- nó là gì và sdng vào âu. Sau ó, bn c!n phi hc

cách

c và vit XML trong PHP, nhng th mà bn có th th c hin bng nhiu cách.

Bài vit này cung c

p bài hc v" lòng ng#n trên XML r$i gii thích cách c và vit XML trong PHP.

XML là gì?

XML là m

t %nh dng l

u tr d liu. Nó không %nh ngh&a d liu nào ang

c ghi li hoc cu trúc c-a d liu

ó. XML ch' %nh ngh&a các th( và thuc tính cho các th( ó. Mt th( XML có dng úng trông gi)ng nh

thnày:

<name>Jack Herrington</name>

Th

( <name> này cha mt s) vn bn: Jack Herrington.

M

t th( XML mà không cha vn bn trông gi)ng nh

thnày:

<powerUp />

Có th

có nhiu cách hn mã hoá mt iu gì ó trong XML. Ví d, th( này to cùng mt !u ra nh

th( tr

c:

<powerUp></powerUp>

B

n cng có th b sung các thuc tính vào mt th( XML. Thí d, th( <name> này cha các thuc tính u tiên và

cu

i cùng:

<name />

B

n cng có th mã hoá các ký t  c bit trong XML. Thí d, mt ký hiu ampersand (&)

c mã hoá nh

thnày:

&

M

t tài liu XML cha các th( và thuc tính

c %nh dng nh

các thí d ã cho là úng ngpháp, ngh&a là các th(

c cân )i, và các ký t 

c mã hoá úng cách. Lit kê 1 là mt thí d v XML úng ng pháp.

Li

t kê 1. Mt thí d v mc lc XML các sách

c và vit XML DOM vi PHP Page 1 of 8

XML trong Li

t kê 1 cha mt danh mc c-a các cu)n sách. Th( cha <books> (các sách) g$m mt tp hp các th(

<book>

(sách), m*i th( cha các th( <author> (tác gi), <title> (tiêu ), và <publisher> (nhà xut bn).

Các tài li

u XML là hp l khi cu trúc c-a các th( và ni dung c-a chúng

c xác th c bi mt tp l

c $ bên

ngoài. T

p l

c $ có th

c xác %nh trong mt lot các %nh dng. Nhm phc v bài vit này, tt c mi th bn

c

!n là XML úng ng pháp.

Nu b

n ngh& rng XML trong rt gi)ng Ngôn ng ánh du Siêu vn bn (HTML) thì bn ã úng. C XML và

HTML là ngôn ng

d a trên các th(, và chúng có nhiu s  gi)ng nhau. Tuy nhiên, iu quan trng là phi l

u ý rng

trong khi các tài li

u XML có th là HTML úng ng pháp, không phi tt c các tài liu XML là HTML úng ng

pháp. Th

( ng#t (br) là mt ví d tuyt ho v nhng s  khác nhau gia XML và HTML. Ng#t dòng này là HTML

úng ng pháp, nh

ng XML không úng ng pháp:

<p>This is a paragraph<br>

With a line break</p>

Ng

#t dòng này là XML và HTML úng ng pháp:

<p>This is a paragraph<br />

With a line break</p>

Nu b

n mu)n vit HTML cng là XML úng ng pháp, hãy theo chu+n Ngôn ng ánh du Siêu vn bn M rng

(XHTML) t

, World Wide Web Consortium (W3C) (xem Tài nguyên). Tt c các trình duyt hin i tr v XHTML.

Ngoài ra, nó còn có th

sdng các công c XML c XHTML và tìm d liu trong các tài liu, d- hn nhiu so

v

i vic phân tích cú pháp thông qua HTML.

c XML bng cách s dng th vin DOM

Cách d

- nht c mt tp XML úng ng pháp là sdng th

vin Mô hình )i t

ng Tài liu (DOM)

c biên

d

%ch sang mt s) cài t c-a PHP. Th

vin DOM c toàn b tài liu XML sang b nhvà trình bày nó nh

mt cây

các nút, nh

minh ho trong Hình 1.

Hình 1. Cây XML DOM dùng cho XML các sách

Nút

books ti 'nh c-a cây có hai th( book con. Trong m*i cu)n sách (book) , có các nút author, publisher, và

title

. Các nút author, publisher, và title m*i th có các nút vn bn con cha vn bn.

B

mã c tp XML các sách và hin th% ni dung sdng DOM hin th% trong Lit kê 2.

Li

t kê 2. c XML các sách (books) vi DOM

 

- !"! #$%&

-'$()#%&

c và vit XML DOM vi PHP Page 2 of 8

K

%ch bn lnh khi ng bng cách to mt )i t

ng new DOMdocument và np XML các sách vào )i t

ng ó

thông qua s

dng ph

ng thc load. Sau ó k%ch bn lnh sdng ph

ng thc getElementsByName nhn mt

danh m

c tt c các ph!n tvi tên cho tr

c.

Trong vòng lp c

-a các nút book, k%ch bn lnh sdng ph

ng thc getElementsByName nhn nodeValue cho

các th

( author, publisher, và title. nodeValue là vn bn trong nút. Sau ó k%ch bn lnh hin th% các giá tr% ó.

B

n có th chy k%ch bn lnh PHP trên dòng lnh nh

thnày:

% php e1.php

PHP Hacks - Jack Herrington - O'Reilly

Podcasting Hacks - Jack Herrington - O'Reilly

%

Nh

bn thy, mt dòng

c in ra cho m*i kh)i sách. ó là mt xut phát t)t. Tuy nhiên, iu gì xy ra nu bn

không có quy

n truy cp n th

vin XML DOM?

c XML thông qua s dng b phân tích cú pháp SAX

M

t cách khác c XML là sdng API n gin cho b phân tích cú pháp XML (SAX). H!u ht tt c các cài t

c

-a PHP có b phân tích cú pháp SAX. B phân tích cú pháp SAX chy trên mô hình gi li. M*i khi mt th(

c

ra hoc óng li, hoc bt k. lúc nào b phân tích cú pháp trông thy mt vn bn nào ó, nó th c hin các cuc

i li n mt s) hàm do ng

/i dùng %nh ngh&a vi các thông tin nút hoc vn bn.

L

i thc-a mt b phân tích cú pháp SAX là ch* nó th c s  nh0. B phân tích cú pháp không gi li quá lâu bt k.

cái gì trong b

nh, cho nên nó có th

c dùng cho các tp c c ln. Nh

c im là ch* vic vit các cuc gi li

phân tích cú pháp SAX là mt iu quá phin phc. Lit kê 3 hin th% b mã c tp XML các sách và hin th%

i dung thông qua sdng SAX.

Li

t kê 3. c XML các sách vi bphân tích cú pháp SAX

--'*#+,-#$..%&

/

$--%

0

-

-'*#+,-#$.

.%&

-

-

'#$1%'2 &

-

-'*#+,-#$.

.%&

-

-

'#$1%'2 &

--'*#+,-#$..%&

--'#$1%'2 &

.-'-

'-

3.&

4

 

 

-5$%&

-5# &

/ *#$-6-#6-%

0

-56-5#&

/$-#+7%-589$%&

-5#-#&

4

/ *#$-6-#%

0

-5#&

-5# &

4

c và vit XML DOM vi PHP Page 3 of 8

K

%ch bn lnh khi ng bng cách thit lp mng g_books, gi li tt c các cu)n sách và thông tin c-a chúng trong

nh, và bin g_elem, ghi li tên c-a th( mà k%ch bn lnh hin ang xlý. Sau ó k%ch bn lnh %nh ngh&a các

hàm g

i li. Trong thí d này, các hàm gi li là startElement, endElement, và textData. Hàm startElement

endElement

c gi ra khi các th(

c m và óng t

ng ng. Hàm textData

c

c gi trên vn bn

a khi ng và kt thúc các th(.

Trong thí d

này, th( startElement tìm kim th( book khi ng mt ph!n tmi trong mng book. Sau ó,

hàm

textData xem xét ph!n thin ti xem nó là mt th( publisher, title, hoc author. Nu nh

vy thì

hàm ó

a vn bn hin ti vào cu)n sách hin ti.

vic phân tích cú pháp

c th c hin, k%ch bn lnh to b phân tích cú pháp vi hàm xml_parser_create.

Tip theo, nó thit t các b

xlý gi li. Sau ó k%ch bn lnh c trong tp và gi các mng thông tin c-a tp n

phân tích cú pháp. Sau khi tp

c c, hàm xml_parser_free xoá b1 b phân tích cú pháp. Ph!n cu)i c-a k%ch

n lnh xut ra ni dung c-a g_books.

Nh

bn thy, ây là b mã cho phép vit vng chãi hn nhiu so vi dng t

ng DOM. Nu bn không có th

vi

n DOM hoc th

vin SAX thì sao? Có ph

ng án nào khác không?

Phân tích cú pháp XML v

i các biu th

c chính quy

Ch

#c ch#n tôi b% mt s) k s

chê vì cp tip cn này, nh

ng bn có th phân tích cú pháp XML bng các biu thc

chính quy. Li

t kê 4 cho thy mt thí d c-a vic sdng hàm preg_ c tp các sách.

Li

t kê 4. c XML các sách vi các biu thc chính quy

/ )!$-6-)%

0

-56-5#&

/$-5#:;,<<

-5#;+=>?*<<

-5#,>,=*%

0

-58 $-5%'@98-5#9-)&

4

4

-)#55$%&

)#55#5

$-6.*#.6.*#.%&

)#55

55

$-6.)!.%&

-//$()#6%&

$-/$-/6A1BC%%

0

)#5$-6-%&

4

)#55/$-%&

/

$-5-%

0

-8,>,=*9(.'.(-8:;,9(.'.&

-8;+=>?*9(.3.&

4

 

 

-)#..&

-//$()#6%&

$-/$-/6A1BC%%0-)#(-&4

/$-/%&

5#

5$.33$(D %333.6

-)#6-%&

/

$-8@9-%

c và vit XML DOM vi PHP Page 4 of 8

L

u ý rng b mã ó ng#n nh

thnào. Nó khi ng bng cách c tp vào mt chu*i ln. Sau ó nó sdng mt

hàm

regex (hàm biu thc chính quy) c trong m*i mc sách. Cu)i cùng, bng cách sdng vòng lp foreach,

k

%ch bn lnh lp m*i kh)i sách và chn ra tác gi, tiêu , và nhà xut bn.

Vy thì âu là nh

c im? Vn )i vi vic sdng b mã biu thc chính quy c XML là nó không kim tra

c ch#c ch#n rng XML úng ng pháp. Có ngh&a là bn không th bit là bn có XML không úng ng pháp

c khi bn b#t !u c nó. Ngoài ra, mt s) dng mu hp l c-a các biu thc chính quy không th phù hp vi

XML c

-a bn, do ó bn s phi sa i chúng sau.

Tôi không bao gi

/ khuyên sdng các biu thc chính quy c XML, nh

ng ôi khi nó là cách thích hp nht vì

các hàm bi

u thc chính quy luôn sn có dùng. ,ng sdng biu thc chính quy c XML t, tr c tip ng

dùng; b

n không iu khin khuôn dng hoc cu trúc c-a XML ó. Hãy luôn c XML t, ng

/i dùng bng cách s

d

ng mt th

vin DOM hoc b phân tích cú pháp SAX.

Vi

t XML bng DOM

c XML ch' là mt ph!n c-a ph

ng trình. Vit nó thì sao nh'? Cách t)t nht vit XML là sdng DOM. Lit kê

5 hi

n th% cách DOM xây d ng tp XML các sách.

Li

t kê 5. Vit XML các sách b

ng DOM

0

5#

5$.3

3$(D %33

3.6

-6-

%&

5#

5$.33$(D %333.6

-6-%&

5#

5$.3

3$(D %33

3.6

-6-

%&

$-8@9819(.'.(-

8@9819(.'.(

-

8@9819(.3.%&

4

 

 

-$%&

-89$

6

6

..

%&

-89$

6

6

..

%&

- !"! #$%&

-'/# &

--'*#$..%&

-'E

$-%&

/

$--%

0

--'*#$..%&

-

-'*#$.

.%&

-

'E

$

-',)-$-8

9%

%&

-'E

$-

%&

--'*#$..%&

-'E

$

-',)-$-89%

%&

-'E

$-%&

-

-'*#$.

.%&

-

'E

$

c và vit XML DOM vi PHP Page 5 of 8

T

i ph!n trên !u c-a k%ch bn lnh, mng books

c np vào vi mt s) sách mu. Các d liu ó có th t, ng

dùng hoc t

, mt c s d liu.

Sau khi các cu

)n sách mu

c np, k%ch bn lnh to mt new DOMDocument mi và b sung nút books g)c vào

nó. R

$i k%ch bn lnh to mt ph!n tcho tác gi, tiêu , và nhà xut bn cho m*i cu)n sách và thêm mt nút vn bn

vào m

*i nút ó. B

c cu)i cùng cho m*i nút book là g#n nó li vào nút books g)c.

on cu)i c-a k%ch bn lnh xut XML ra bn iu khin nh/ ph

ng thc saveXML. ((Bn cng có th sdng

ph

ng thc save (ghi li) to mt tp t, XML.) !u ra c-a k%ch bn lnh hin th% trong Lit kê 6.

Li

t kê 6. Kt qu u ra t kch bn lnh xây dng DOM

Giá tr

% th c c-a vic sdng DOM là nó to XML luôn úng ng pháp. Nh

ng bn có th làm gì nu bn không có

quy

n truy cp DOM to XML?

Vi

t XML bng PHP

Nu không có s

n DOM, bn có th sdng khuôn mu vn bn PHP vit XML. Lit kê 7 hin th% cách PHP xây

d

 ng nên tp XML các sách.

Li

t kê 7. Vit XML các sách b

ng PHP

-',)-$-8

9%

%&

-'E

$-

%&

-'E

$-%&

4

-'FG"=$%&

 

H

A(

 )#F.@(1. 

H

 

-$%&

-89$

6

6

..

%&

-89$

6

6

..

%&

 

 

/

$--%

0

 

c và vit XML DOM vi PHP Page 6 of 8

Ph

!n trên !u c-a k%ch bn lnh t

ng t  nh

k%ch bn lnh DOM. Ph!n cu)i c-a k%ch bn lnh m ra th( books, sau

ó lp li qua m*i cu)n, to th( book và toàn b các th( title, author, và publisher.

V

n )i vi tip cn này là vic mã hoá các th c th. ch#c ch#n rng th c th

c mã hoá úng cách, hàm

htmlentities

phi

c gi trên m*i mc, nh

trong Lit kê 8.

Li

t kê 8. S dng hàm htmlentities mã hoá các thc th

ây là lý do nó li làm phin n vic vit XML trong PHP c s. Bn ngh& rng bn ang to XML hoàn ho, nh

sau ó b

n nhn thy là mt s) ph!n tnào ó không

c mã hoá úng cách khi c) g#ng chy nó vi d liu th c.

K

t lun

Quanh XML luôn có nhi

u c

/ng iu và ln xn. Tuy nhiên, nó không khó khn nh

bn ngh& -- nht là trong mt

ngôn ng

ln nh

PHP. Khi bn hiu và th c hin XML úng cách, bn s thy có nhiu công c mnh mà bn có th

dng. XPath và XSLT là hai công c áng thnghim.

Tài nguyên

H

c tp

Tìm hiu v các tiêu chu+n dùng cho XHTML ti XHTML 1.0, Ngôn ng ánh du Siêu vn bn M rng.

Tìm các tiêu chu+n dùng cho XML.

Tìm hiu v ngôn ng

/ng dn XML.

Tìm hiu v các phép chuyn i XSL, mt ngôn ng dùng bin i XML.

c tiêu chu+n dùng %nh ngh&a cu trúc c-a các tài liu XML c-a bn, L

c $ XML.

 

$-89%& 

 

$-8

9%& 

 

$-8

9%& 

 

4

 

 

/

$--%

0

-

#$-896*-,5I;,*?%&

-

#$-8

96*-,5I;,*?%&

-

#$-8

96*-,5I;,*?%&

 

 

$-%& 

 

$-

%& 

 

$-

%& 

 

4

 

c và vit XML DOM vi PHP Page 7 of 8

Tìm nhiu tài nguyên hn cho các nhà phát trin XML trong vùng XML c-a developerWorks.

Hãy thm developerWorks Open source zone có thông tin h

ng dn cách làm sâu hn, công c, và các cp

nht d

  án giúp bn phát trin vi các công ngh mã ngu$n m và sdng chúng vi các sn ph+m c-a

IBM.

L

y sn phm và công ngh

Hãy thm PHP.net tìm hiu các tin tc mi nht v PHP, tìm các ti v, và hc tp t, nhng ng

/i dùng

khác.

Tìm hiu v b Phân tích cú pháp XML Expat, b phân tích mà

c sdng cung cp các chc nng b

phân tích cú pháp SAX dùng cho PHP.

i mi d  án phát trin mã ngu$n m tip theo c-a bn vi ph!n mm dùng thc-a IBM, sn có ti v

hoc trên

&a DVD.

Th

o lun

Tham gia cng $ng developerWorks bng cách gia nhp vào các blog c-a developerWorks.

ôi nét v tác gi

Jack D. Herrington là k

s

ph!n mm cao cp vi hn 20 nm kinh nghim. Ông là tác gi c-a ba cu)n sách: Code

Generation in Action, Podcasting Hacks và PHP Hacks. Ông c

ng ã vit hn 30 bài báo.

c và vit XML DOM vi PHP Page 8 of 8

Bạn đang đọc truyện trên: AzTruyen.Top

Tags: #jjjjj