c và vi t XML DOM v i PHP                                                                          Page 1 of 8


      c và vi t XML DOM v i PHP
                                                                             !

M c     : Trung bình

Jack Herrington, T ng biên t p, Code Generation Network

08 01 2010

       Các k thu t myriad s n có    c và vi t XML trong PHP. Bài vi t này trình bày ba ph ng th c  c
       XML: s d ng th vi n DOM, s d ng b phân tích cú pháp SAX, và s d ng các bi u th c chính quy.
       Vi c vi t XML b ng cách s d ng DOM và khuôn m u v n b n PHP c ng s          c c p.

Vi c c và vi t Ngôn ng      ánh d u M r ng (XML) trong PHP hình nh h i áng ng i. Trong th c t , XML và t t
c các công ngh liên quan c a nó có th là n ng n . Tuy nhiên, c và vi t XML trong PHP không ph i là m t tác v
 áng ng i. Tr c tiên, b n c!n ph i h c m t chút v XML -- nó là gì và s d ng vào âu. Sau ó, b n c!n ph i h c
cách c và vi t XML trong PHP, nh ng th mà b n có th th c hi n b ng nhi u cách.

Bài vi t này cung c p bài h c v" lòng ng#n trên XML r$i gi i thích cách   c và vi t XML trong PHP.

XML là gì?
XML là m t %nh d ng l u tr d li u. Nó không %nh ngh&a d li u nào ang        c ghi l i ho c c u trúc c a d li u
 ó. XML ch' %nh ngh&a các th( và thu c tính cho các th( ó. M t th( XML có d ng úng trông gi)ng nh th này:
<name>Jack Herrington</name>

Th( <name> này ch a m t s) v n b n: Jack Herrington.

M t th( XML mà không ch a v n b n trông gi)ng nh th này:
<powerUp />

Có th có nhi u cách h n     mã hoá m t i u gì ó trong XML. Ví d , th( này t o cùng m t !u ra nh th( tr    c:
<powerUp></powerUp>

B n c ng có th b sung các thu c tính vào m t th( XML. Thí d , th( <name> này ch a các thu c tính     u tiên và
cu i cùng:

<name first="Jack" last="Herrington" />

B n c ng có th mã hoá các ký t      c bi t trong XML. Thí d , m t ký hi u ampersand (&)     c mã hoá nh th này:
&

M t tài li u XML ch a các th( và thu c tính  c %nh d ng nh các thí d ã cho là úng ng pháp, ngh&a là các th(
   c cân )i, và các ký t     c mã hoá úng cách. Li t kê 1 là m t thí d v XML úng ng pháp.

Li t kê 1. M t thí d v m c l c XML các sách
c và vi t XML DOM v i PHP                                                                            Page 2 of 8




XML trong Li t kê 1 ch a m t danh m c c a các cu)n sách. Th( cha <books> (các sách) g$m m t t p h p các th(
<book> (sách), m*i th( ch a các th( <author> (tác gi ), <title> (tiêu ), và <publisher> (nhà xu t b n).

Các tài li u XML là h p l khi c u trúc c a các th( và n i dung c a chúng c xác th c b i m t t p l c $ bên
ngoài. T p l c $ có th      c xác %nh trong m t lo t các %nh d ng. Nh m ph c v bài vi t này, t t c m i th b n
c!n là XML úng ng pháp.

N u b n ngh& r ng XML trong r t gi)ng Ngôn ng     ánh d u Siêu v n b n (HTML) thì b n ã úng. C XML và
HTML là ngôn ng d a trên các th(, và chúng có nhi u s gi)ng nhau. Tuy nhiên, i u quan tr ng là ph i l u ý r ng
trong khi các tài li u XML có th là HTML úng ng pháp, không ph i t t c các tài li u XML là HTML úng ng
pháp. Th( ng#t (br) là m t ví d tuy t h o v nh ng s khác nhau gi a 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>

N u b n mu)n vi t HTML c ng là XML úng ng pháp, hãy theo chu+n Ngôn ng     ánh d u Siêu v n b n M r ng
(XHTML) t, World Wide Web Consortium (W3C) (xem Tài nguyên). T t c các trình duy t hi n i tr v XHTML.
Ngoài ra, nó còn có th s d ng các công c XML   c XHTML và tìm d li u trong các tài li u, d- h n nhi u so
v i vi c phân tích cú pháp thông qua HTML.

     c XML b ng cách s                      d ng th          vi n DOM
Cách d- nh t      c m t t p XML úng ng pháp là s d ng th vi n Mô hình )i t ng Tài li u (DOM)    c biên
d%ch sang m t s) cài t c a PHP. Th vi n DOM c toàn b tài li u XML sang b nh và trình bày nó nh m t 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 t i '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 v n b n con ch a v n b n.

B mã         c t p XML các sách và hi n th% n i dung s d ng DOM hi n th% trong Li t kê 2.

Li t kê 2.   c XML các sách (books) v i DOM

                  ! "!   #   $%&
       '      $          ()#   %&
c và vi t XML DOM v i PHP                                                                                                               Page 3 of 8


                                 '            *       #             + ,     - # $ .              . %&
   /                 $                                             %
   0
                                          '               *    #    + , - # $ .                             . %&
                                              '               #$1%'    2    &

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

             .                   '                            '                        3 .&
   4




K%ch b n l nh kh i ng b ng cách t o m t )i t ng new DOMdocument và n p XML các sách vào )i t                                              ng ó
thông qua s d ng ph ng th c load. Sau ó k%ch b n l nh s d ng ph ng th c getElementsByName                                                 nh n m t
danh m c t t c các ph!n t v i tên cho tr c.
Trong vòng l p c a các nút book, k%ch b n l nh s d ng ph ng th c getElementsByName nh n nodeValue cho
các th( author, publisher, và title. nodeValue là v n b n trong nút. Sau ó k%ch b n l nh hi n th% các giá tr% ó.

B n có th ch y k%ch b n l nh PHP trên dòng l nh nh th này:
% php e1.php
PHP Hacks - Jack Herrington - O'Reilly
Podcasting Hacks - Jack Herrington - O'Reilly
%

Nh b n th y, m t dòng                                      c in ra cho m*i kh)i sách. ó là m t xu t phát t)t. Tuy nhiên, i u gì x y ra n u b n
không có quy n truy c p                                   n th vi n XML DOM?




       c XML thông qua s                                                                d ng b phân tích cú pháp SAX
M t cách khác      c XML là s d ng API      n gi n cho b phân tích cú pháp XML (SAX). H!u h t t t 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 ch y trên mô hình g i l i. M*i khi m t th(       c
m ra ho c óng l i, ho c b t k. lúc nào b phân tích cú pháp trông th y m t v n b n nào ó, nó th c hi n các cu c
g i l i n m t s) hàm do ng /i dùng %nh ngh&a v i các thông tin nút ho c v n b n.

L i th c a m t 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 l i quá lâu b t k.
cái gì trong b nh , cho nên nó có th  c dùng cho các t p c c l n. Nh c i m là ch* vi c vi t các cu c g i l i
b phân tích cú pháp SAX là m t i u quá phi n ph c. Li t kê 3 hi n th% b mã   c t p XML các sách và hi n th%
n i dung thông qua s d ng SAX.

Li t kê 3.               c XML các sách v i b phân tích cú pháp SAX

       5                                  $%&
       5         #               &

   /                             *        #           $                    6           # 6              %
   0
                         5         6              5           #&
       / $           #             +          7       %            5           89               $%&
        5        #               # &
   4
   /                         *        #           $                    6           #    %
   0
                         5       #&
       5         #                &
   4
c và vi t XML DOM v i PHP                                                                                                                   Page 4 of 8


   /                         ) !        $                 6              )   %
   0
                         5          6    5          #&
       / $           5       #         :;,                <<
        5        #                 ;+=>? *          <<
        5        #                ,>,=* %
   0
       5             8              $           5         % ' @ 98               5        # 9       ) &
   4
   4

                             )# 5               5              $%&

   )# 5              5       #      5                $                   6 .          * #    .6 .   *     #   . %&
   )# 5              5                  5           5                $               6 . ) !    . %&

       /     /               $              ()#     6              %&

             $                      /           $   /6 A1BC % %
   0
   )# 5                  $                  6             %&
   4

   )# 5                      5/     $                     %&

   /                 $       5                                 %
   0
                         8 ,>,=* 9(. ' .(                                8 :;,           9(. ' .&
                         8 ;+=>? * 9(.3 .&
   4




K%ch b n l nh kh i ng b ng cách thi t l p m ng g_books, gi l i t t c các cu)n sách và thông tin c a chúng trong
b nh , và bi n g_elem, ghi l i tên c a th( mà k%ch b n l nh hi n ang x lý. Sau ó k%ch b n l nh %nh ngh&a các
hàm g i l i. Trong thí d này, các hàm g i l i là startElement, endElement, và textData. Hàm startElement
và endElement        c g i ra khi các th(   c m và óng t ng ng. Hàm textData          c     c g i trên v n b n
gi a kh i ng và k t thúc các th(.

Trong thí d này, th( startElement tìm ki m th( book kh i ng m t ph!n t m i trong m ng book. Sau ó,
hàm textData xem xét ph!n t hi n t i xem nó là m t th( publisher, title, ho c author. N u nh v y thì
hàm ó a v n b n hi n t i vào cu)n sách hi n t i.

   vi c phân tích cú pháp     c th c hi n, k%ch b n l nh t o b phân tích cú pháp v i hàm xml_parser_create.
Ti p theo, nó thi t t các b x lý g i l i. Sau ó k%ch b n l nh c trong t p và g i các m ng thông tin c a t p n
b phân tích cú pháp. Sau khi t p     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
b n l nh xu t ra n i dung c a g_books.

Nh b n th y, ây là b mã cho phép vi t v ng chãi h n nhi u so v i d ng t                                              ng   ng DOM. N u b n không có th
vi n DOM ho c th vi n 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 bi u th c chính quy
Ch#c ch#n tôi b% m t s) k s chê vì c p ti p c n này, nh ng b n có th phân tích cú pháp XML b ng các bi u th c
chính quy. Li t kê 4 cho th y m t thí d c a vi c s d ng hàm preg_     c t p các sách.

Li t kê 4.               c XML các sách v i các bi u th c chính quy

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

          5#                 5     $ . 3                 3 $(D %3 3                  3        .6
       )# 6                            %&
   /                 $                          8@9                          %
c và vi t XML DOM v i PHP                                                                                                                         Page 5 of 8


   0
            5#                5       $ . 3                            3 $(D %3 3                     3        .6
                 6                      %&
            5#                5       $ . 3                            3 $(D %3 3                 3       .6
                 6                     %&
            5#                5       $ . 3                                     3 $(D %3 3                          3   .6
                 6                     %&
            $                   8@9819(. ' .(                                         8@9819(. ' .(
                              8@9819(.3 . %&
   4



L u ý r ng b mã ó ng#n nh th nào. Nó kh i ng b ng cách c t p vào m t chu*i l n. Sau ó nó s d ng m t
hàm regex (hàm bi u th c chính quy)          c trong m*i m c sách. Cu)i cùng, b ng cách s d ng vòng l p foreach,
k%ch b n l nh l p m*i kh)i sách và ch n ra tác gi , tiêu , và nhà xu t b n.
V y thì âu là nh c i m? V n      )i v i vi c s d ng b mã bi u th c chính quy       c XML là nó không ki m tra
tr c ch#c ch#n r ng XML úng ng pháp. Có ngh&a là b n không th bi t là b n có XML không úng ng pháp
tr c khi b n b#t !u c nó. Ngoài ra, m t s) d ng m u h p l c a các bi u th c chính quy không th phù h p v i
XML c a b n, do ó b n s ph i s a i chúng sau.

Tôi không bao gi/ khuyên s d ng các bi u th c chính quy    c XML, nh ng ôi khi nó là cách thích h p nh t vì
các hàm bi u th c chính quy luôn s n có dùng. ,ng s d ng bi u th c chính quy     c XML t, tr c ti p ng /i
dùng; b n không i u khi n khuôn d ng ho c c u trúc c a XML ó. Hãy luôn c XML t, ng /i dùng b ng cách s
d ng m t th vi n DOM ho c b phân tích cú pháp SAX.




Vi t XML b ng DOM
   c XML ch' là m t ph!n c a ph ng trình. Vi t nó thì sao nh'? Cách t)t nh t                                                 vi t XML là s d ng DOM. Li t kê
5 hi n th% cách DOM xây d ng t p XML các sách.

Li t kê 5. Vi t XML các sách b ng DOM

                                      $%&
                     89                  $
                                                               6
                                                                                6
                                          .                        .
   %&
                     89                       $
                                                                                6
                                                                                6
                                          .                        .
   %&
                              ! "!                #            $%&
            ' /           #                                       &

                          '                   *        #           $ .                . %&
            '                     E           $            %&

   /                 $                                                 %
   0
                          '                   *        #           $ .              . %&
                                    '                          *       #        $ .           . %&
                     '               E                $
            '                     , ) -               $                     8              9 %
   %&
        '                     E           $                            %&
                                      '                    *       #        $ .            . %&
                 '                  E                 $
            '                     , ) -                $                    8           9 %
   %&
        '                     E           $                        %&
                                              '                        *        #   $ .               . %&
                              '                E               $
c và vi t XML DOM v i PHP                                                                                                     Page 6 of 8


            '                    , ) -       $                8        9 %
   %&
        '                    E      $                             %&

        '                    E      $        %&
   4

                         '        F G"=$%&



T i ph!n trên !u c a k%ch b n l nh, m ng books                               c n p vào v i m t s) sách m u. Các d li u ó có th t, ng /i
dùng ho c t, m t c s d li u.
Sau khi các cu)n sách m u      c n p, k%ch b n l nh t o m t new DOMDocument m i và b sung nút books g)c vào
nó. R$i k%ch b n l nh t o m t ph!n t cho tác gi , tiêu , và nhà xu t b n cho m*i cu)n sách và thêm m t nút v n b n
vào m*i nút ó. B c cu)i cùng cho m*i nút book là g#n nó l i vào nút books g)c.

 o n cu)i c a k%ch b n l nh xu t XML ra b n i u khi n nh/ ph ng th c saveXML. ((B n c ng có th s d ng
ph ng th c save (ghi l i) t o m t t p t, XML.) !u ra c a k%ch b n l nh hi n th% trong Li t kê 6.

Li t kê 6. K t qu                       u ra t k ch b n l nh xây d ng DOM
   H                A(
       )#       F                  .@(1.




   H


Giá tr% th c c a vi c s d ng DOM là nó t o XML luôn úng ng pháp. Nh ng b n có th làm gì n u b n không có
quy n truy c p DOM t o XML?




Vi t XML b ng PHP
N u không có s n DOM, b n có th s d ng khuôn m u v n b n PHP                                  vi t XML. Li t kê 7 hi n th% cách PHP xây
d ng nên t p XML các sách.

Li t kê 7. Vi t XML các sách b ng PHP

                                   $%&
                    89                $
                                                  6
                                                                  6
                                    .                 .
   %&
                    89                   $
                                                                  6
                                                                  6
                                    .                 .
   %&




   /                $                                     %
   0
c và vi t XML DOM v i PHP                                                                                                Page 7 of 8


                           $               8             9 %&
                               $               8           9 %&

                                   $                8                 9 %&



   4




Ph!n trên !u c a k%ch b n l nh t ng t nh k%ch b n l nh DOM. Ph!n cu)i c a k%ch b n l nh m ra th( books, sau
 ó l p l i qua m*i cu)n, t o th( book và toàn b các th( title, author, và publisher.

V n     )i v i ti p c n này là vi c mã hoá các th c th .  ch#c ch#n r ng th c th                         c mã hoá úng cách, hàm
htmlentities ph i        c g i trên m*i m c, nh trong Li t kê 8.

Li t kê 8. S d ng hàm htmlentities                           mã hoá các th c th



   /      $                                    %
   0
               #                   $                8             96 *-,5I; ,*? %&
                   #                   $             8              96 *-,5I; ,*? %&
                       #                       $         8                96 *-,5I; ,*? %&


                           $                   %&
                               $                    %&
                                   $                         %&



   4




  ây là lý do nó l i làm phi n n vi c vi t XML trong PHP c s . B n ngh& r ng b n ang t o XML hoàn h o, nh ng
sau ó b n nh n th y là m t s) ph!n t nào ó không       c mã hoá úng cách khi c) g#ng ch y nó v i d li u th c.




K t lu n
Quanh XML luôn có nhi u c /ng i u và l n x n. Tuy nhiên, nó không khó kh n nh b n ngh& -- nh t là trong m t
ngôn ng l n nh PHP. Khi b n hi u và th c hi n XML úng cách, b n s th y có nhi u công c m nh mà b n có th
s d ng. XPath và XSLT là hai công c áng th nghi m.



Tài nguyên
H ct p
     Tìm hi u v các tiêu chu+n dùng cho XHTML t i XHTML 1.0, Ngôn ng                               ánh d u Siêu v n b n M r ng.

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

       Tìm hi u v ngôn ng                      / d n XML.
                                                ng

       Tìm hi u v các phép chuy n                        i XSL, m t ngôn ng dùng        bi n   i XML.

         c tiêu chu+n dùng                     % ngh&a c u trúc c a các tài li u XML c a b n, L
                                               nh                                                       c $ XML.
c và vi t XML DOM v i PHP                                                                          Page 8 of 8


      Tìm nhi u tài nguyên h n cho các nhà phát tri n XML trong vùng XML c a developerWorks.

      Hãy th m developerWorks Open source zone có thông tin h ng d n cách làm sâu h n, công c , và các c p
      nh t d án giúp b n phát tri n v i các công ngh mã ngu$n m và s d ng chúng v i các s n ph+m c a
      IBM.


L y s n ph m và công ngh
      Hãy th m PHP.net tìm hi u các tin t c m i nh t v PHP, tìm các t i v , và h c t p t, nh ng ng / dùng
                                                                                                    i
      khác.

      Tìm hi u v b Phân tích cú pháp XML Expat, b phân tích mà       c s d ng    cung c p các ch c n ng b
      phân tích cú pháp SAX dùng cho PHP.

         i m i d án phát tri n mã ngu$n m ti p theo c a b n v i ph!n m m dùng th c a IBM, s n có    t iv
      ho c trên &a DVD.


Th o lu n
      Tham gia c ng $ng developerWorks b ng cách gia nh p vào các blog c a developerWorks.



  ôi nét v tác gi
Jack D. Herrington là k s ph!n m m cao c p v i h n 20 n m kinh nghi m. Ông là tác gi c a ba cu)n sách: Code
Generation in Action, Podcasting Hacks và PHP Hacks. Ông c ng ã vi t h n 30 bài báo.

Os xmldomphp

  • 1.
    c và vit XML DOM v i PHP Page 1 of 8 c và vi t XML DOM v i PHP ! M c : Trung bình Jack Herrington, T ng biên t p, Code Generation Network 08 01 2010 Các k thu t myriad s n có c và vi t XML trong PHP. Bài vi t này trình bày ba ph ng th c c XML: s d ng th vi n DOM, s d ng b phân tích cú pháp SAX, và s d ng các bi u th c chính quy. Vi c vi t XML b ng cách s d ng DOM và khuôn m u v n b n PHP c ng s c c p. Vi c c và vi t Ngôn ng ánh d u M r ng (XML) trong PHP hình nh h i áng ng i. Trong th c t , XML và t t c các công ngh liên quan c a nó có th là n ng n . Tuy nhiên, c và vi t XML trong PHP không ph i là m t tác v áng ng i. Tr c tiên, b n c!n ph i h c m t chút v XML -- nó là gì và s d ng vào âu. Sau ó, b n c!n ph i h c cách c và vi t XML trong PHP, nh ng th mà b n có th th c hi n b ng nhi u cách. Bài vi t này cung c p bài h c v" lòng ng#n trên XML r$i gi i thích cách c và vi t XML trong PHP. XML là gì? XML là m t %nh d ng l u tr d li u. Nó không %nh ngh&a d li u nào ang c ghi l i ho c c u trúc c a d li u ó. XML ch' %nh ngh&a các th( và thu c tính cho các th( ó. M t th( XML có d ng úng trông gi)ng nh th này: <name>Jack Herrington</name> Th( <name> này ch a m t s) v n b n: Jack Herrington. M t th( XML mà không ch a v n b n trông gi)ng nh th này: <powerUp /> Có th có nhi u cách h n mã hoá m t i u gì ó trong XML. Ví d , th( này t o cùng m t !u ra nh th( tr c: <powerUp></powerUp> B n c ng có th b sung các thu c tính vào m t th( XML. Thí d , th( <name> này ch a các thu c tính u tiên và cu i cùng: <name first="Jack" last="Herrington" /> B n c ng có th mã hoá các ký t c bi t trong XML. Thí d , m t ký hi u ampersand (&) c mã hoá nh th này: & M t tài li u XML ch a các th( và thu c tính c %nh d ng nh các thí d ã cho là úng ng pháp, ngh&a là các th( c cân )i, và các ký t c mã hoá úng cách. Li t kê 1 là m t thí d v XML úng ng pháp. Li t kê 1. M t thí d v m c l c XML các sách
  • 2.
    c và vit XML DOM v i PHP Page 2 of 8 XML trong Li t kê 1 ch a m t danh m c c a các cu)n sách. Th( cha <books> (các sách) g$m m t t p h p các th( <book> (sách), m*i th( ch a các th( <author> (tác gi ), <title> (tiêu ), và <publisher> (nhà xu t b n). Các tài li u XML là h p l khi c u trúc c a các th( và n i dung c a chúng c xác th c b i m t t p l c $ bên ngoài. T p l c $ có th c xác %nh trong m t lo t các %nh d ng. Nh m ph c v bài vi t này, t t c m i th b n c!n là XML úng ng pháp. N u b n ngh& r ng XML trong r t gi)ng Ngôn ng ánh d u Siêu v n b n (HTML) thì b n ã úng. C XML và HTML là ngôn ng d a trên các th(, và chúng có nhi u s gi)ng nhau. Tuy nhiên, i u quan tr ng là ph i l u ý r ng trong khi các tài li u XML có th là HTML úng ng pháp, không ph i t t c các tài li u XML là HTML úng ng pháp. Th( ng#t (br) là m t ví d tuy t h o v nh ng s khác nhau gi a 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> N u b n mu)n vi t HTML c ng là XML úng ng pháp, hãy theo chu+n Ngôn ng ánh d u Siêu v n b n M r ng (XHTML) t, World Wide Web Consortium (W3C) (xem Tài nguyên). T t c các trình duy t hi n i tr v XHTML. Ngoài ra, nó còn có th s d ng các công c XML c XHTML và tìm d li u trong các tài li u, d- h n nhi u so v i vi c phân tích cú pháp thông qua HTML. c XML b ng cách s d ng th vi n DOM Cách d- nh t c m t t p XML úng ng pháp là s d ng th vi n Mô hình )i t ng Tài li u (DOM) c biên d%ch sang m t s) cài t c a PHP. Th vi n DOM c toàn b tài li u XML sang b nh và trình bày nó nh m t 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 t i '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 v n b n con ch a v n b n. B mã c t p XML các sách và hi n th% n i dung s d ng DOM hi n th% trong Li t kê 2. Li t kê 2. c XML các sách (books) v i DOM ! "! # $%& ' $ ()# %&
  • 3.
    c và vit XML DOM v i PHP Page 3 of 8 ' * # + , - # $ . . %& / $ % 0 ' * # + , - # $ . . %& ' #$1%' 2 & ' * # + , - # $ . . %& ' #$1%' 2 & ' * # + , - # $ . . %& ' #$1%' 2 & . ' ' 3 .& 4 K%ch b n l nh kh i ng b ng cách t o m t )i t ng new DOMdocument và n p XML các sách vào )i t ng ó thông qua s d ng ph ng th c load. Sau ó k%ch b n l nh s d ng ph ng th c getElementsByName nh n m t danh m c t t c các ph!n t v i tên cho tr c. Trong vòng l p c a các nút book, k%ch b n l nh s d ng ph ng th c getElementsByName nh n nodeValue cho các th( author, publisher, và title. nodeValue là v n b n trong nút. Sau ó k%ch b n l nh hi n th% các giá tr% ó. B n có th ch y k%ch b n l nh PHP trên dòng l nh nh th này: % php e1.php PHP Hacks - Jack Herrington - O'Reilly Podcasting Hacks - Jack Herrington - O'Reilly % Nh b n th y, m t dòng c in ra cho m*i kh)i sách. ó là m t xu t phát t)t. Tuy nhiên, i u gì x y ra n u b n không có quy n truy c p n th vi n XML DOM? c XML thông qua s d ng b phân tích cú pháp SAX M t cách khác c XML là s d ng API n gi n cho b phân tích cú pháp XML (SAX). H!u h t t t 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 ch y trên mô hình g i l i. M*i khi m t th( c m ra ho c óng l i, ho c b t k. lúc nào b phân tích cú pháp trông th y m t v n b n nào ó, nó th c hi n các cu c g i l i n m t s) hàm do ng /i dùng %nh ngh&a v i các thông tin nút ho c v n b n. L i th c a m t 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 l i quá lâu b t k. cái gì trong b nh , cho nên nó có th c dùng cho các t p c c l n. Nh c i m là ch* vi c vi t các cu c g i l i b phân tích cú pháp SAX là m t i u quá phi n ph c. Li t kê 3 hi n th% b mã c t p XML các sách và hi n th% n i dung thông qua s d ng SAX. Li t kê 3. c XML các sách v i b phân tích cú pháp SAX 5 $%& 5 # & / * # $ 6 # 6 % 0 5 6 5 #& / $ # + 7 % 5 89 $%& 5 # # & 4 / * # $ 6 # % 0 5 #& 5 # & 4
  • 4.
    c và vit XML DOM v i PHP Page 4 of 8 / ) ! $ 6 ) % 0 5 6 5 #& / $ 5 # :;, << 5 # ;+=>? * << 5 # ,>,=* % 0 5 8 $ 5 % ' @ 98 5 # 9 ) & 4 4 )# 5 5 $%& )# 5 5 # 5 $ 6 . * # .6 . * # . %& )# 5 5 5 5 $ 6 . ) ! . %& / / $ ()# 6 %& $ / $ /6 A1BC % % 0 )# 5 $ 6 %& 4 )# 5 5/ $ %& / $ 5 % 0 8 ,>,=* 9(. ' .( 8 :;, 9(. ' .& 8 ;+=>? * 9(.3 .& 4 K%ch b n l nh kh i ng b ng cách thi t l p m ng g_books, gi l i t t c các cu)n sách và thông tin c a chúng trong b nh , và bi n g_elem, ghi l i tên c a th( mà k%ch b n l nh hi n ang x lý. Sau ó k%ch b n l nh %nh ngh&a các hàm g i l i. Trong thí d này, các hàm g i l i là startElement, endElement, và textData. Hàm startElement và endElement c g i ra khi các th( c m và óng t ng ng. Hàm textData c c g i trên v n b n gi a kh i ng và k t thúc các th(. Trong thí d này, th( startElement tìm ki m th( book kh i ng m t ph!n t m i trong m ng book. Sau ó, hàm textData xem xét ph!n t hi n t i xem nó là m t th( publisher, title, ho c author. N u nh v y thì hàm ó a v n b n hi n t i vào cu)n sách hi n t i. vi c phân tích cú pháp c th c hi n, k%ch b n l nh t o b phân tích cú pháp v i hàm xml_parser_create. Ti p theo, nó thi t t các b x lý g i l i. Sau ó k%ch b n l nh c trong t p và g i các m ng thông tin c a t p n b phân tích cú pháp. Sau khi t p 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 b n l nh xu t ra n i dung c a g_books. Nh b n th y, ây là b mã cho phép vi t v ng chãi h n nhi u so v i d ng t ng ng DOM. N u b n không có th vi n DOM ho c th vi n 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 bi u th c chính quy Ch#c ch#n tôi b% m t s) k s chê vì c p ti p c n này, nh ng b n có th phân tích cú pháp XML b ng các bi u th c chính quy. Li t kê 4 cho th y m t thí d c a vi c s d ng hàm preg_ c t p các sách. Li t kê 4. c XML các sách v i các bi u th c chính quy )# ..& / / $ ()# 6 %& $ / $ /6 A1BC % % 0 )# ( & 4 / $ / %& 5# 5 $ . 3 3 $(D %3 3 3 .6 )# 6 %& / $ 8@9 %
  • 5.
    c và vit XML DOM v i PHP Page 5 of 8 0 5# 5 $ . 3 3 $(D %3 3 3 .6 6 %& 5# 5 $ . 3 3 $(D %3 3 3 .6 6 %& 5# 5 $ . 3 3 $(D %3 3 3 .6 6 %& $ 8@9819(. ' .( 8@9819(. ' .( 8@9819(.3 . %& 4 L u ý r ng b mã ó ng#n nh th nào. Nó kh i ng b ng cách c t p vào m t chu*i l n. Sau ó nó s d ng m t hàm regex (hàm bi u th c chính quy) c trong m*i m c sách. Cu)i cùng, b ng cách s d ng vòng l p foreach, k%ch b n l nh l p m*i kh)i sách và ch n ra tác gi , tiêu , và nhà xu t b n. V y thì âu là nh c i m? V n )i v i vi c s d ng b mã bi u th c chính quy c XML là nó không ki m tra tr c ch#c ch#n r ng XML úng ng pháp. Có ngh&a là b n không th bi t là b n có XML không úng ng pháp tr c khi b n b#t !u c nó. Ngoài ra, m t s) d ng m u h p l c a các bi u th c chính quy không th phù h p v i XML c a b n, do ó b n s ph i s a i chúng sau. Tôi không bao gi/ khuyên s d ng các bi u th c chính quy c XML, nh ng ôi khi nó là cách thích h p nh t vì các hàm bi u th c chính quy luôn s n có dùng. ,ng s d ng bi u th c chính quy c XML t, tr c ti p ng /i dùng; b n không i u khi n khuôn d ng ho c c u trúc c a XML ó. Hãy luôn c XML t, ng /i dùng b ng cách s d ng m t th vi n DOM ho c b phân tích cú pháp SAX. Vi t XML b ng DOM c XML ch' là m t ph!n c a ph ng trình. Vi t nó thì sao nh'? Cách t)t nh t vi t XML là s d ng DOM. Li t kê 5 hi n th% cách DOM xây d ng t p XML các sách. Li t kê 5. Vi t XML các sách b ng DOM $%& 89 $ 6 6 . . %& 89 $ 6 6 . . %& ! "! # $%& ' / # & ' * # $ . . %& ' E $ %& / $ % 0 ' * # $ . . %& ' * # $ . . %& ' E $ ' , ) - $ 8 9 % %& ' E $ %& ' * # $ . . %& ' E $ ' , ) - $ 8 9 % %& ' E $ %& ' * # $ . . %& ' E $
  • 6.
    c và vit XML DOM v i PHP Page 6 of 8 ' , ) - $ 8 9 % %& ' E $ %& ' E $ %& 4 ' F G"=$%& T i ph!n trên !u c a k%ch b n l nh, m ng books c n p vào v i m t s) sách m u. Các d li u ó có th t, ng /i dùng ho c t, m t c s d li u. Sau khi các cu)n sách m u c n p, k%ch b n l nh t o m t new DOMDocument m i và b sung nút books g)c vào nó. R$i k%ch b n l nh t o m t ph!n t cho tác gi , tiêu , và nhà xu t b n cho m*i cu)n sách và thêm m t nút v n b n vào m*i nút ó. B c cu)i cùng cho m*i nút book là g#n nó l i vào nút books g)c. o n cu)i c a k%ch b n l nh xu t XML ra b n i u khi n nh/ ph ng th c saveXML. ((B n c ng có th s d ng ph ng th c save (ghi l i) t o m t t p t, XML.) !u ra c a k%ch b n l nh hi n th% trong Li t kê 6. Li t kê 6. K t qu u ra t k ch b n l nh xây d ng DOM H A( )# F .@(1. H Giá tr% th c c a vi c s d ng DOM là nó t o XML luôn úng ng pháp. Nh ng b n có th làm gì n u b n không có quy n truy c p DOM t o XML? Vi t XML b ng PHP N u không có s n DOM, b n có th s d ng khuôn m u v n b n PHP vi t XML. Li t kê 7 hi n th% cách PHP xây d ng nên t p XML các sách. Li t kê 7. Vi t XML các sách b ng PHP $%& 89 $ 6 6 . . %& 89 $ 6 6 . . %& / $ % 0
  • 7.
    c và vit XML DOM v i PHP Page 7 of 8 $ 8 9 %& $ 8 9 %& $ 8 9 %& 4 Ph!n trên !u c a k%ch b n l nh t ng t nh k%ch b n l nh DOM. Ph!n cu)i c a k%ch b n l nh m ra th( books, sau ó l p l i qua m*i cu)n, t o th( book và toàn b các th( title, author, và publisher. V n )i v i ti p c n này là vi c mã hoá các th c th . ch#c ch#n r ng th c th c mã hoá úng cách, hàm htmlentities ph i c g i trên m*i m c, nh trong Li t kê 8. Li t kê 8. S d ng hàm htmlentities mã hoá các th c th / $ % 0 # $ 8 96 *-,5I; ,*? %& # $ 8 96 *-,5I; ,*? %& # $ 8 96 *-,5I; ,*? %& $ %& $ %& $ %& 4 ây là lý do nó l i làm phi n n vi c vi t XML trong PHP c s . B n ngh& r ng b n ang t o XML hoàn h o, nh ng sau ó b n nh n th y là m t s) ph!n t nào ó không c mã hoá úng cách khi c) g#ng ch y nó v i d li u th c. K t lu n Quanh XML luôn có nhi u c /ng i u và l n x n. Tuy nhiên, nó không khó kh n nh b n ngh& -- nh t là trong m t ngôn ng l n nh PHP. Khi b n hi u và th c hi n XML úng cách, b n s th y có nhi u công c m nh mà b n có th s d ng. XPath và XSLT là hai công c áng th nghi m. Tài nguyên H ct p Tìm hi u v các tiêu chu+n dùng cho XHTML t i XHTML 1.0, Ngôn ng ánh d u Siêu v n b n M r ng. Tìm các tiêu chu+n dùng cho XML. Tìm hi u v ngôn ng / d n XML. ng Tìm hi u v các phép chuy n i XSL, m t ngôn ng dùng bi n i XML. c tiêu chu+n dùng % ngh&a c u trúc c a các tài li u XML c a b n, L nh c $ XML.
  • 8.
    c và vit XML DOM v i PHP Page 8 of 8 Tìm nhi u tài nguyên h n cho các nhà phát tri n XML trong vùng XML c a developerWorks. Hãy th m developerWorks Open source zone có thông tin h ng d n cách làm sâu h n, công c , và các c p nh t d án giúp b n phát tri n v i các công ngh mã ngu$n m và s d ng chúng v i các s n ph+m c a IBM. L y s n ph m và công ngh Hãy th m PHP.net tìm hi u các tin t c m i nh t v PHP, tìm các t i v , và h c t p t, nh ng ng / dùng i khác. Tìm hi u v b Phân tích cú pháp XML Expat, b phân tích mà c s d ng cung c p các ch c n ng b phân tích cú pháp SAX dùng cho PHP. i m i d án phát tri n mã ngu$n m ti p theo c a b n v i ph!n m m dùng th c a IBM, s n có t iv ho c trên &a DVD. Th o lu n Tham gia c ng $ng developerWorks b ng cách gia nh p vào các blog c a developerWorks. ôi nét v tác gi Jack D. Herrington là k s ph!n m m cao c p v i h n 20 n m kinh nghi m. Ông là tác gi c a ba cu)n sách: Code Generation in Action, Podcasting Hacks và PHP Hacks. Ông c ng ã vi t h n 30 bài báo.