XML dành cho các nhà phát triển PHP, Phần 2: Các kỹ thuật phân tích cú pháp XML nâng cao

Kỹ thuật phân tích cú pháp XML của PHP5 đối với các tài liệu XML lớn hoặc phức tạp

Bài thứ hai trong loạt bài ba phần này sẽ thảo luận về các kỹ thuật phân tích cú pháp XML của PHP5, tập trung vào cách phân tích cú pháp các tài liệu XML lớn hoặc phức tạp. Nó sẽ cung cấp một số nền tảng về các phần mở rộng để phân tích cú pháp, cụ thể, phương thức phân tích nào là thích hợp nhất đối với loại tài liệu XML nào và lý do tại sao.

Cliff Morgan, Tác giả, 自由职业者

Cliff Morgan là một nhà tư vấn độc lập, người thiết kế và thực hiện các ứng dụng Web và các điểm Web.



22 01 2011

Giới thiệu

PHP5 cung cấp một loạt các kỹ thuật phân tích cú pháp XML được cải tiến. Trình phân tích cú pháp SAX Expat của James Clark, nay dựa trên libxml2, không còn là sự lựa chọn đầy đủ chức năng duy nhất phải chấp nhận nữa. Phân tích cú pháp với DOM, tuân thủ hoàn toàn với chuẩn W3C, là một lựa chọn quen thuộc. Cả SimpleXML, mà bạn đã thấy trong Phần 1 (xem Tài nguyên), lẫn XMLReader, dễ hơn và nhanh hơn SAX, mang lại các cách tiếp cận phân tích cú pháp bổ sung thêm. Tất cả các phần mở rộng XML bây giờ đều dựa trên thư viện libxml2 của dự án GNOME. Thư viện được thống nhất này cho phép liên tác giữa các phần mở rộng khác nhau. Bài viết này sẽ trình bày các kỹ thuật phân tích cú pháp XML của PHP5, tập trung vào phân tích các tài liệu XML lớn hoặc phức tạp. Nó sẽ cung cấp một số nền tảng về các kỹ thuật phân tích, phương pháp nào là phù hợp nhất đối với các kiểu tài liệu XML nào, và, nếu bạn có sự lựa chọn, thì những tiêu chí lựa chọn của bạn là gì.

Phần 1 đã cung cấp các thông tin cốt yếu về XML và tập trung vào các giao diện lập trình ứng dụng khởi động nhanh (API). Nó trình bày cách mà SimpleXML, kết hợp với Mô hình Đối tượng Tài liệu (DOM) khi cần thiết, trở thành sự lựa chọn lý tưởng nếu bạn làm việc với các tài liệu XML không phức tạp, có thể đoán trước được, và tương đối nhỏ.

XML và PHP5

Ngôn ngữ Đánh dấu Mở rộng (XML) được mô tả vừa như là một ngôn ngữ đánh dấu và vừa như là một định dạng lưu trữ dữ liệu dựa trên văn bản; nó cung cấp một phương tiện dựa trên văn bản để áp dụng và mô tả một cấu trúc hình cây đối với thông tin.

Trong PHP5, có các phần mở rộng được viết lại và mới hoàn toàn để phân tích cú pháp XML. Chúng nạp toàn bộ tài liệu XML vào bộ nhớ gồm SimpleXML, DOM, và bộ xử lý XSLT. Các trình phân tích cú pháp ấy cung cấp cho bạn mỗi lần một đoạn tài liệu XML gồm API đơn giản dùng cho XML (SAX - Simple API for XML) và XMLReader. SAX làm việc theo cùng cách như nó làm việc trong PHP4, nhưng không còn dựa vào thư viện ngoại lai nữa, mà dựa vào thư viện libxml2. Nếu bạn đã làm quen với DOM từ các ngôn ngữ khác, bạn sẽ viết mã dễ dàng với các chức năng tương tự trong PHP hơn trước đây.


Cơ bản về phân tích cú pháp XML

Hai phương tiện cơ bản để phân tích XML là: cây và luồng. Kiểu phân tích cây gồm việc tải toàn bộ tài liệu XML vào bộ nhớ. Cấu trúc tệp tin kiểu cây cho phép truy cập ngẫu nhiên các phần tử của tài liệu và biên tập XML. Các thí dụ về phân tích cú pháp kiểu cây gồm DOM và SimpleXML. Chúng chia sẻ cấu trúc hình cây ở các định dạng khác nhau nhưng lại liên tác được trong bộ nhớ. Không giống như cách phân tích kiểu cây, phân tích cú pháp luồng không nạp toàn bộ tài liệu XML vào bộ nhớ. Việc sử dụng thuật ngữ luồng trong ngữ cảnh này tương ứng chặt chẽ với thuật ngữ luồng trong công nghệ vừa tải vừa nghe (streaming audio). Nó làm những gì và nguyên nhân tại sao nó làm như vậy là hoàn toàn giống nhau, cụ thể là phân phát mỗi lần một số lượng nhỏ dữ liệu để bảo toàn cả băng thông và bộ nhớ. Trong phân tích luồng, chỉ các nút nào hiện đang được phân tích mới có thể truy cập được, và việc biên tập XML, như là một tài liệu, là không thể. Thí dụ về các trình phân tích cú pháp luồng gồm XMLReader và SAX.


Các trình phân tích cú pháp dựa trên cây

Được đặt tên là phân tích cú pháp dựa trên cây vì chúng nạp toàn bộ tài liệu XML vào bộ nhớ với gốc tài liệu là thân cây, và tất cả các thế hệ con, cháu, các thế hệ tiếp theo, và các thuộc tính là các cành cây. Trình phân tích dựa trên cây quen thuộc nhất là DOM. Trình phân tích dựa trên cây dễ viết mã nhất là SimpleXML. Bạn sẽ xem xét cả hai bộ này.

Phân tích cú pháp với DOM

Chuẩn DOM, theo W3C, là “... một giao diện trung lập với nền và ngôn ngữ mà sẽ cho phép các chương trình và kịch bản lệnh truy cập và cập nhật động nội dung, cấu trúc và kiểu dáng của các tài liệu.” Thư viện libxml2 của dự án GNOME thực hiện DOM, cùng với tất cả các phương thức của nó, bằng C. Do toàn bộ các bộ mở rộng PHP5 XML đều dựa trên libxml2, có một tính liên tác đầy đủ giữa các phần mở rộng. Tính liên tác này nâng cao chức năng của chúng rất nhiều. Thí dụ, bạn có thể sử dụng XMLReader, một trình phân tích cú pháp luồng, để nhận được một phần tử, nhập nó vào DOM và trích xuất dữ liệu bằng cách sử dụng XPath. Việc đó thật linh hoạt. Bạn sẽ thấy điều này trong Liệt kê 5.

DOM là một trình phân tích cú pháp dựa trên cây. DOM dễ hiểu và sử dụng do cấu trúc của nó trong bộ nhớ giống với tài liệu XML gốc. DOM chuyển thông tin cho ứng dụng bằng cách tạo ra một cây các đối tượng giống chính xác với cây các phần tử từ tệp tin XML, với mỗi phần tử XML là một nút trong cây đó. DOM là một chuẩn W3C, nó cung cấp cho DOM nhiều quyền hạn với các nhà phát triển do tính nhất quán của nó với các ngôn ngữ lập trình khác. Do DOM xây dựng nên một cây của toàn bộ tài liệu, nó sử dụng nhiều bộ nhớ và chiếm nhiều thời gian xử lý.

DOM vào việc

Nếu bạn bị bắt buộc bởi thiết kế của bạn hoặc bởi một sự ràng buộc nào khác phải là một đặc thủ (nguyên bản tiếng Anh, “one trick pony”- một cái gì đó chỉ dùng tốt cho một việc, một người chỉ chuyên một việc – N.D.) trong lĩnh vực các trình phân tích cú pháp, đây là nơi mà bạn muốn có mặt, chỉ bởi tính linh hoạt của DOM. Với DOM, bạn có thể xây dựng, sửa đổi, truy vấn, xác nhận và chuyển đổi các tài liệu XML. Bạn có thể sử dụng tất cả các phương thức và thuộc tính của DOM. Hầu hết các phương thức DOM mức 2 đều được thực hiện với các thuộc tính được hỗ trợ chính xác. Các tài liệu được phân tích bằng DOM có thể phức tạp tùy ý vì tính vô cùng linh hoạt của nó. Tuy nhiên phải nhớ rằng tính linh hoạt đó đổi bằng cái giá của việc bạn nạp một tài liệu XML lớn vào bộ nhớ cùng một lúc.

Thí dụ trong Liệt kê 1 dùng DOM để phân tích tài liệu và lấy ra một phần tử bằng getElementById. Cần phải xác nhận tài liệu hợp lệ bằng cách đặt validateOnParse=true trước khi tham chiếu đến mã nhận dạng. Theo chuẩn DOM, việc này đòi hỏi một DTD (document type definition - định nghĩa kiểu tài liệu) định nghĩa thuộc tính ID là có kiểu ID.

Liệt kê 1. Sử dụng DOM với một tài liệu cơ bản
<?php

$doc = new DomDocument;

// We must validate the document before referring to the id
$doc->validateOnParse = true;
$doc->Load('basic.xml');

echo "The element whose id is myelement is: " . 
$doc->getElementById('myelement')->tagName . "\n";

?>

Hàm getElementsByTagName() trả về một cá thể mới của lớp DOMNodeList chứa các phần tử với một tên thẻ đã cho trước. Dĩ nhiên danh sách phải được duyệt qua. Việc thay đổi cấu trúc tài liệu trong khi lặp qua NodeListgetElementsByTagName() đã trả về ảnh hưởng đến NodeList mà bạn đang lặp qua nó (xem Liệt kê 2). Không đòi hỏi xác nhận hợp lệ.

Liệt kê 2. Phương thức DOM getElementsByTagName
DOMDocument {
  DOMNodeList getElementsByTagName(string name);
}

Thí dụ trong Liệt kê 3 sử dụng DOM với XPath.

Liệt kê 3. Sử dụng DOM và phân tích cú pháp bằng XPath
<?php

$doc = new DOMDocument;

// We don't want to bother with white spaces
$doc->preserveWhiteSpace = false;

$doc->Load('book.xml');

$xpath = new DOMXPath($doc);

// We start from the root element
$query = '//book/chapter/para/informaltable/tgroup/tbody/row/entry[. = "en"]';

$entries = $xpath->query($query);

foreach ($entries as $entry) {
   echo "Found {$entry->previousSibling->previousSibling->nodeValue}," .
        " by {$entry->previousSibling->nodeValue}\n";
}
?>

Sau khi đã nói tất cả những điều tốt đẹp về DOM, tôi sẽ kết thúc bằng một thí dụ về những gì không nên làm với DOM chỉ để làm cho rõ ràng nhất có thể, và sau đó trong thí dụ tiếp theo, làm thế nào để bạn tự cứu mình. Liệt kê 4 minh họa việc nạp một tệp tin lớn vào DOM đơn giản chỉ để trích xuất dữ liệu từ một thuộc tính đơn lẻ bằng DomXpath.

Liệt kê 4. Sử dụng DOM với Xpath không đúng cách trên một tài liệu XML lớn
<?php

// Parsing a Large Document with DOM and DomXpath
// First create a new DOM document to parse
$dom = new DomDocument();

//  This document is huge and we don't really need anything from the tree
//  This huge document uses a huge amount of memory 
$dom->load("tooBig.xml");
$xp = new DomXPath($dom);
$result = $xp->query("/blog/entries/entry[@ID = 5225]/title") ;
print $result->item(0)->nodeValue ."\n";

?>

Thí dụ bám sát cuối cùng trong Liệt kê 5 sử dụng DOM với XPath theo cùng một cách, chỉ khác là dữ liệu được chuyển giao một phần tử một lần bởi XMLReader dùng expand(). Với phương thức này, bạn có thể chuyển đổi một nút do XMLReader chuyển đến thành một DOMElement.

Liệt kê 5. Sử dụng DOM với XPath đúng cách trên một tài liệu XML lớn
<?php

// Parsing a large document with XMLReader with Expand - DOM/DOMXpath 
$reader = new XMLReader();

$reader->open("tooBig.xml");

while ($reader->read()) {
    switch ($reader->nodeType) {
        case (XMLREADER::ELEMENT):
        if ($reader->localName == "entry") {
            if ($reader->getAttribute("ID") == 5225) {
                $node = $reader->expand();
                $dom = new DomDocument();
                $n = $dom->importNode($node,true);
                $dom->appendChild($n);
                $xp = new DomXpath($dom);
                $res = $xp->query("/entry/title");
                echo $res->item(0)->nodeValue;
            }
        }
    }
}
    
?>

Phân tích cú pháp bằng SimpleXML

Phần mở rộng SimpleXML là một lựa chọn khác để phân tích một tài liệu XML. Phần mở rộng SimpleXML đòi hỏi phải có PHP5 và gồm cả hỗ trợ XPath dựng sẵn. SimpleXML làm việc tốt nhất với dữ liệu XML cơ bản, không phức tạp. Với đều kiện là tài liệu XML đó không quá phức tạp, quá sâu, và không có nội dung hỗn tạp, SimpleXML sử dụng đơn giản hơn DOM, như tên nó hàm ý. Nó trực quan hơn nếu bạn đang làm việc với một cấu trúc tài liệu đã biết.

SimpleXML vào việc

SimpleXML chia sẻ nhiều ưu điểm của DOM và dễ dàng được mã hoá hơn. Nó cho phép dễ dàng truy cập đến một cây XML, có sự xác thực hợp lệ sẵn và hỗ trợ XPath, và có thể liên tác với DOM, mang lại cho nó sự hỗ trợ về đọc và viết đối với tài liệu XML. Bạn có thể mã hoá tài liệu đã được phân tích cú pháp bằng SimpleXML đơn giản và nhanh chóng. Tuy nhiên phải nhớ rằng, giống như DOM, SimpleXML phải đánh đổi cái giá cho sự dễ dàng và linh hoạt của nó nếu bạn nạp một tài liệu XML lớn vào bộ nhớ.

Mã sau đây trong Liệt kê 6 trích xuất <plot> từ tài liệu XML ví dụ.

Liệt kê 6. Trích xuất văn bản của phần tử plot
<?php
$xmlstr = <<<XML
<?xml version='1.0' standalone='yes'?>
<books>
   <book>
      <title>Great American Novel</title>
      <plot>
         Cliff meets Lovely Woman. Loyal Dog sleeps, but
         wakes up to bark at mailman.
      </plot>
      <success type="bestseller">4</success>
      <success type="bookclubs">9</success>
   </book>
</books>
XML;
?>
<?php

$xml = new SimpleXMLElement($xmlstr);
echo $xml->book[0]->plot; // "Cliff meets Lovely Woman. ..."
?>

Mặt khác, bạn có thể cần phải trích xuất một địa chỉ nhiều dòng. Khi nhiều cá thể của một phần tử tồn tại như là phần tử con của chỉ một phần tử cha, các kỹ thuật lặp bình thường được áp dụng. Mã sau đây trong Liệt kê 7 trình bày chức năng này.

Liệt kê 7. Trích xuất nhiều cá thể của một phần tử
<?php
$xmlstr = <<<XML
<xml version='1.0' standalone='yes'?>
<books>
   <book>
      <title>Great American Novel</title>
      <plot>
         Cliff meets Lovely Woman.
      </plot>
      <success type="bestseller">4</success>
      <success type="bookclubs">9</success>
   </book>
   <book>
      <title>Man Bites Dog</title>
      <plot>
         Reporter invents a prize-winning story.
      </plot>
      <success type="bestseller">22</success>
      <success type="bookclubs">3</success>
   </book>
</books>
XML;
?>
<php

$xml = new SimpleXMLElement($xmlstr);

foreach ($xml->book as $book) {
   echo $book->plot, '<br />';
}
?

Ngoài việc đọc các tên phần tử và giá trị của chúng, SimpleXML cũng có thể truy cập được các thuộc tính phần tử. Trong đoạn mã trong Liệt kê 8, bạn truy cập các thuộc tính của một phần tử như bạn thực hiện với các phần tử của một mảng.

Liệt kê 8. Giải thích việc SimpleXML truy cập đến các thuộc tính của một phần tử
<?php
$xmlstr = <<<XML
<?xml version='1.0' standalone='yes'?>
<books>
   <book>
      <title>Great American Novel</title>
      <plot>
         Cliff meets Lovely Woman.
      </plot>
      <success type="bestseller">4</success>
      <success type="bookclubs">9</success>
   </book>
   <book>
      <title>Man Bites Dog</title>
      <plot>
         Reporter invents a prize-winning story.
      <plot>
      <success type="bestseller">22</success>
      <success type="bookclubs">3</success>
   </book>
<books>
XML;
?>
<?php

$xml = new SimpleXMLElement($xmlstr);

foreach ($xml->book[0]->success as $success) {
   switch((string) $success['type']) {
   case 'bestseller':
      echo $success, ' months on bestseller list<br />';
      break;
   case 'bookclubs':
      echo $success, ' bookclub listings<br />';
      break;
   }
}

?>

Thí dụ cuối cùng này (xem Liệt kê 9) sử dụng SimpleXML và DOM với XMLReader. Với XMLReader, dữ liệu được chuyển giao một phần tử một lần bằng cách sử dụng expand(). Với phương thức này, bạn có thể chuyển đổi một nút được XMLReader chuyển giao thành một DOMElement, và sau đó thành SimpleXML.

Liệt kê 9. Sử dụng SimpleXML với DOM và XMLReader để phân tích một tài liệu XML lớn
<?php

// Parsing a large document with Expand and SimpleXML
$reader = new XMLReader();

$reader->open("tooBig.xml");

while ($reader->read()) {
    switch ($reader->nodeType) {
        case (XMLREADER::ELEMENT):
        if ($reader->localName == "entry") {
            if ($reader->getAttribute("ID") == 5225) {
                $node = $reader->expand();
                $dom = new DomDocument();
                $n = $dom->importNode($node,true);
                $dom->appendChild($n);
                $sxe = simplexml_import_dom($n);
                echo $sxe->title; 
            }
        }
    }
}
    
?>

Các trình phân tích cú pháp dựa trên luồng

Có tên là trình phân tích cú pháp dựa trên luồng vì chúng phân tích XML trong một luồng với cùng lý lẽ như trong công nghệ vừa tải về vừa nghe, làm việc với một nút cụ thể, và khi xong việc với nút đó, hoàn toàn quên đi sự hiện diện của nó. XMLReader là một trình phân tích cú pháp kéo ra (pull parser) và bạn mã hoá cho nó rất giống với cách làm đối với bảng kết quả truy vấn cơ sở dữ liệu trong một con trỏ. Điều này làm cho dễ dàng làm việc hơn với các tệp tin XML không quen thuộc hoặc không thể đoán trước được.

Phân tích cú pháp với XMLReader

Phần mở rộng XMLReader là trình phân tích cú pháp dựa trên luồng, thuộc kiểu thường được nói đến như là trình phân tích cú pháp kiểu con trỏ hoặc trình phân tích cú pháp kéo ra. XMLReader rút các thông tin từ tài liệu XML khi có yêu cầu. Nó dựa trên API dẫn xuất từ C# XmlTextReader. Nó được gộp vào và được kích hoạt trong PHP 5,1 theo mặc định và dựa trên libxml2. Trước PHP 5.1, phần mở rộng XMLReader không được kích hoạt theo mặc định nhưng có sẵn tại PECL (xem phần Tài nguyên để nhận được liên kết). XMLReader hỗ trợ các vùng tên và xác thực hợp lệ, gồm cả DTD và Relaxed NG.

XMLReader vào việc

XMLReader, như là một trình phân tích luồng, rất thích hợp với việc phân tích cú pháp các tài liệu XML lớn, nó dễ mã hoá hơn nhiều so với SAX và thường là nhanh hơn. Đây là trình phân tích cú pháp luồng đáng lựa chọn.

Thí dụ này trong Liệt kê 10 phân tích một tài liệu XML lớn với XMLReader.

Liệt kê 10. XMLReader với một tệp tin XML lớn
<?php

$reader = new XMLReader();
$reader->open("tooBig.xml");
while ($reader->read()) {
   switch ($reader->nodeType) {
   case (XMLREADER::ELEMENT):
      if ($reader->localName == "entry") {
         if ($reader->getAttribute("ID") == 5225) {
            while ($reader->read()) {
               if ($reader->nodeType == XMLREADER::ELEMENT) {
                  if ($reader->localName == "title") {
                     $reader->read();
                     echo $reader->value;
                     break;
                  }
                  if ($reader->localName == "entry") {
                     break;
                  }
               }
            }
         }
      }
   }
}
?>

Phân tích cú pháp với SAX

API đơn giản dùng cho XML (SAX) là một trình phân tích luồng. Các sự kiện được kết hợp với tài liệu XML đang được đọc, vì vậy SAX được mã hoá bằng các lời gọi lại. Có các sự kiện dành cho các thẻ mở và đóng phần tử, dành cho nội dung của các phần tử, dành cho các thực thể, và dành cho các lỗi phân tích. Lý do chính để sử dụng trình phân tích SAX chứ không phải trình phân tích XMLReader là ở chỗ đôi khi trình phân tích SAX hiệu quả hơn và thường là quen thuộc hơn. Một nhược điểm lớn là ở chỗ viết mã cho trình phân tích cú pháp SAX phức tạp và khó hơn so với mã XMLReader.

SAX vào việc

SAX rất có thể đã quen thuộc với những người đã làm việc với XML trong PHP4, và phần mở rộng SAX trong PHP5 tương thích với phiên bản họ trước đây đã sử dụng. Do nó là một trình phân tích luồng, đó là một sự lựa chọn tốt đối với các tệp tin lớn, nhưng lại không phải là một sự lựa chọn tốt như XMLReader.

Thí dụ trong Liệt kê 11 này phân tích một tài liệu XML lớn bằng SAX.

Liệt kê 11. Sử dụng SAX để phân tích một tệp tin XML lớn
<?php

//This class contains all the callback methods that will actually
//handle the XML data.
class SaxClass {
   private $hit = false;
   private $titleHit = false;

   //callback for the start of each element
   function startElement($parser_object, $elementname, $attribute) {
      if ($elementname == "entry") {
         if ( $attribute['ID'] == 5225) {
            $this->hit = true;
         } else {
            $this->hit = false;
         }
      }
      if ($this->hit && $elementname == "title") {
         $this->titleHit = true;
      } else {
         $this->titleHit =false;
      }
   }

   //callback for the end of each element
   function endElement($parser_object, $elementname) {
   }

   //callback for the content within an element
   function contentHandler($parser_object,$data)
   {
      if ($this->titleHit) {
         echo trim($data)."<br />";
      }
   }
}

//Function to start the parsing once all values are set and
//the file has been opened
function doParse($parser_object) {
   if (!($fp = fopen("tooBig.xml", "r")));

   //loop through data
   while ($data = fread($fp, 4096)) {
      //parse the fragment
      xml_parse($parser_object, $data, feof($fp));
   }
}

$SaxObject = new SaxClass();
$parser_object = xml_parser_create();
xml_set_object ($parser_object, $SaxObject);

//Don't alter the case of the data
xml_parser_set_option($parser_object, XML_OPTION_CASE_FOLDING, false);

xml_set_element_handler($parser_object,"startElement","endElement");
xml_set_character_data_handler($parser_object, "contentHandler");

doParse($parser_object);

?>

Tóm tắt

PHP5 cung cấp một loạt các kỹ thuật phân tích cú pháp được cải tiến. Việc phân tích cú pháp với DOM, hiện tuân thủ hoàn toàn với chuẩn W3C, là một tuỳ chọn quen thuộc, và là lựa chọn của bạn đối với các tài liệu phức tạp nhưng tương đối nhỏ. SimpleXML là cách để làm việc với các tài liệu XML cơ bản và không quá lớn, và XMLReader, dễ hơn và nhanh hơn SAX, là trình phân tích cú pháp luồng đáng lựa chọn đối với các tài liệu lớn.

Tài nguyên

Học tập

  • XML dành cho các nhà phát triển PHP, Phần 1: Khởi động PHP-với-XML trong 15-phút (Cliff Morgan, developerWorks, 02.2007): Trong bài viết đầu của loạt bài ba phần này, hãy khám phá việc triển khai thực hiện XML của PHP5 và cách làm việc với XML dễ như thế nào trong một môi trường PHP.
  • XML dành cho các nhà phát triển PHP, Phần 3: Các kỹ thuật nâng cao để đọc, thao tác và viết XML (Cliff Morgan, developerWorks, 03/2007): Tìm hiểu nhiều hơn về các kỹ thuật để đọc, thao tác và viết XML bằng PHP5 trong bài viết cuối cùng của loạt bài 3 phần về XML dành cho các nhà phát triển PHP.
  • SAX, API mạnh mẽ (Benoît Marchal, developerWorks, 08/2001): Đọc bài giới thiệu này về SAX, so sánh DOM và SAX và sau đó đưa SAX vào làm việc.
  • Đọc và viết DOM XML bằng PHP (Jack Herrington, developerWorks, 12/2005): Đọc XML bằng ba phương thức: thư viện DOM, bộ phân tích cú pháp SAX, và các biểu thức chính quy. Thêm nữa, tìm hiểu cách viết XML bằng cách sử dụng DOM và khuôn mẫu văn bản PHP.
  • XSLT là loại ngôn ngữ gì (Michael Kay, developerWorks, 04/2005): Đặt XSLT vào ngữ cảnh khi bạn tìm hiểu nguồn gốc của ngôn ngữ, nó giỏi về mặt nào, và tại sao bạn nên sử dụng nó
  • Mách nước: Thực hiện XMLReader: Một giao diện dùng cho các trình chuyển đổi XM (Benoît Marchal, developerWorks, 11/2003): Ở mách nước này, hãy khám phá các API dùng cho các tuyến xử lý XML và hiểu tại sao giao diện XMLReader thân thuộc lại thích hợp đối với nhiều thành phần XML
  • Xử lý SimpleXML bằng PHP (Elliotte Rusty Harold, developerWorks, 10/2006): Thử phần mở rộng SimpleXML và cho phép các trang PHP để truy vấn, tìm kiếm, sửa đổi, và tái bản XML.
  • Hướng dẫn di trú tới PHP5 (Jack Herrington, developerWorks, 09/2006): Di trú mã phát triển bằng PHP V4 đến V5 và cải thiện đáng kể khả năng bảo trì và tính ổn định mã của bạn.
  • Đối với bài đầu tiên trong loạt bài ba phần về SimpleXML, hãy đọc Giới thiệu Simple XML trong PHP5 ( Alejandro Gervasio, Dev Shed, 6/2006): Tiết kiệm công sức với các cơ sở của phần mở rộng simplexml trong PHP 5, một thư viện mà chủ yếu tập trung vào việc phân tích cú pháp các tệp tin XML đơn giản.
  • PHP Cookbook, Second Edition (Adam Trachtenberg và David Sklar, O'Reilly Media, 8/2006): Tìm hiểu cách xây dựng các ứng dụng Web động làm việc trên bất kỳ trình duyệt Web nào.
  • XML.com: Thăm trang web XML của O'Reilly để có sự bao quát toàn diện về thế giới XML.
  • Thông tin W3C XML: Tìm hiểu đặc tả XML từ nguồn.
  • Trang nhà phát triển PHP: Tìm hiểu nhiều hơn về ngôn ngữ kịch bản lệnh vạn năng được sử dụng rộng rãi này, nó đặc biệt phù hợp để phát triển Web.
  • Planet PHP: Xem nguồn tin tức về cộng đồng các nhà phát triển PHP.
  • Chứng nhận XML của IBM: Tìm hiểu cách làm thế nào để bạn có thể trở thành một Nhà phát triển được IBM chứng nhận về XML và công nghệ liên quan.
  • Thư viện kỹ thuật XML: Xem vùng XML trên developerWorks để có nhiều bài viết và mách nước về kỹ thuật, các hướng dẫn, tiêu chuẩn, và Sách đỏ của IBM.
  • Các sự kiện và phát tin kỹ thuật trong developerWorks: Theo sát công nghệ trong các phiên này.

Lấy sản phẩm và công nghệ

Thảo luận

Bình luận

developerWorks: Đăng nhập

Các trường được đánh dấu hoa thị là bắt buộc (*).


Bạn cần một ID của IBM?
Bạn quên định danh?


Bạn quên mật khẩu?
Đổi mật khẩu

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Ở lần bạn đăng nhập đầu tiên vào trang developerWorks, một hồ sơ cá nhân của bạn được tạo ra. Thông tin trong bản hồ sơ này (tên bạn, nước/vùng lãnh thổ, và tên cơ quan) sẽ được trưng ra cho mọi người và sẽ đi cùng các nội dung mà bạn đăng, trừ khi bạn chọn việc ẩn tên cơ quan của bạn. Bạn có thể cập nhật tài khoản trên trang IBM bất cứ khi nào.

Thông tin gửi đi được đảm bảo an toàn.

Chọn tên hiển thị của bạn



Lần đầu tiên bạn đăng nhập vào trang developerWorks, một bản trích ngang được tạo ra cho bạn, bạn cần phải chọn một tên để hiển thị. Tên hiển thị của bạn sẽ đi kèm theo các nội dung mà bạn đăng tải trên developerWorks.

Tên hiển thị cần có từ 3 đến 30 ký tự. Tên xuất hiện của bạn phải là duy nhất trên trang Cộng đồng developerWorks và vì lí do an ninh nó không phải là địa chỉ email của bạn.

Các trường được đánh dấu hoa thị là bắt buộc (*).

(Tên hiển thị cần có từ 3 đến 30 ký tự)

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Thông tin gửi đi được đảm bảo an toàn.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=70
Zone=Nguồn mở
ArticleID=619073
ArticleTitle=XML dành cho các nhà phát triển PHP, Phần 2: Các kỹ thuật phân tích cú pháp XML nâng cao
publish-date=01222011