際際滷

際際滷Share a Scribd company logo
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. Bi vi t ny tr狸nh by 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 vo 但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.

Bi vi t ny cung c p bi 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 no 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 ny:
<name>Jack Herrington</name>

Th( <name> ny 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 ny:
<powerUp />

C坦 th c坦 nhi u c叩ch h n     m達 ho叩 m t i u g狸 坦 trong XML. V鱈 d , th( ny 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 vo m t th( XML. Th鱈 d , th( <name> ny 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 ny:
&

M t ti 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 ti 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
ngoi. 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 bi vi t ny, 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 ti li u XML c坦 th l HTML 炭ng ng ph叩p, kh担ng ph i t t c c叩c ti 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 ny 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 ny 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 Ti nguy棚n). T t c c叩c tr狸nh duy t hi n i tr v XHTML.
Ngoi 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 ti 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 Ti li u (DOM)    c bi棚n
d%ch sang m t s) ci t c a PHP. Th vi n DOM c ton b ti li u XML sang b nh v tr狸nh by 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 vo )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 ny:
% 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 ci 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 no b ph但n t鱈ch c炭 ph叩p tr担ng th y m t v n b n no 坦, n坦 th c hi n c叩c cu c
g i l i n m t s) hm 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
hm g i l i. Trong th鱈 d ny, c叩c hm g i l i l startElement, endElement, v textData. Hm startElement
v endElement        c g i ra khi c叩c th(   c m v 坦ng t ng ng. Hm 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 ny, th( startElement t狸m ki m th( book kh i ng m t ph!n t m i trong m ng book. Sau 坦,
hm 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狸
hm 坦 a v n b n hi n t i vo 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 hm 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, hm 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 no 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 ny, 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 hm 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 no. N坦 kh i ng b ng c叩ch c t p vo m t chu*i l n. Sau 坦 n坦 s d ng m t
hm regex (hm 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坦. Ngoi 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 hm 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 vo 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 vo
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
vo m*i n炭t 坦. B c cu)i c湛ng cho m*i n炭t book l g#n n坦 l i vo 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 lm 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 ton b c叩c th( title, author, v publisher.

V n     )i v i ti p c n ny 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, hm
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 hm 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 lm phi n n vi c vi t XML trong PHP c s . B n ngh& r ng b n ang t o XML hon h o, nh ng
sau 坦 b n nh n th y l m t s) ph!n t no 坦 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.



Ti 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 ti 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 ti 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 lm 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 vo 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 bi b叩o.

More Related Content

Os xmldomphp

  • 1. 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. Bi vi t ny tr狸nh by 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 vo 但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. Bi vi t ny cung c p bi 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 no 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 ny: <name>Jack Herrington</name> Th( <name> ny 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 ny: <powerUp /> C坦 th c坦 nhi u c叩ch h n m達 ho叩 m t i u g狸 坦 trong XML. V鱈 d , th( ny 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 vo m t th( XML. Th鱈 d , th( <name> ny 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 ny: & M t ti 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 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 ti 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 ngoi. 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 bi vi t ny, 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 ti li u XML c坦 th l HTML 炭ng ng ph叩p, kh担ng ph i t t c c叩c ti 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 ny 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 ny 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 Ti nguy棚n). T t c c叩c tr狸nh duy t hi n i tr v XHTML. Ngoi 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 ti 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 Ti li u (DOM) c bi棚n d%ch sang m t s) ci t c a PHP. Th vi n DOM c ton b ti li u XML sang b nh v tr狸nh by 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 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 vo )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 ny: % 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 ci 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 no b ph但n t鱈ch c炭 ph叩p tr担ng th y m t v n b n no 坦, n坦 th c hi n c叩c cu c g i l i n m t s) hm 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 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 hm g i l i. Trong th鱈 d ny, c叩c hm g i l i l startElement, endElement, v textData. Hm startElement v endElement c g i ra khi c叩c th( c m v 坦ng t ng ng. Hm 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 ny, th( startElement t狸m ki m th( book kh i ng m t ph!n t m i trong m ng book. Sau 坦, hm 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狸 hm 坦 a v n b n hi n t i vo 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 hm 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, hm 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 no 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 ny, 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 hm 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 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 no. N坦 kh i ng b ng c叩ch c t p vo m t chu*i l n. Sau 坦 n坦 s d ng m t hm regex (hm 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坦. Ngoi 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 hm 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 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 vo 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 vo 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 vo m*i n炭t 坦. B c cu)i c湛ng cho m*i n炭t book l g#n n坦 l i vo 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 lm 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 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 ton b c叩c th( title, author, v publisher. V n )i v i ti p c n ny 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, hm 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 hm 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 lm phi n n vi c vi t XML trong PHP c s . B n ngh& r ng b n ang t o XML hon h o, nh ng sau 坦 b n nh n th y l m t s) ph!n t no 坦 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. Ti 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 ti li u XML c a b n, L nh c $ XML.
  • 8. c v vi t XML DOM v i PHP Page 8 of 8 T狸m nhi u ti 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 lm 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 vo 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 bi b叩o.