Dạy thiết kế web - Hướng dẫn thiết kế web, Kỹ thuật thiết kế website

Xử lý XML

Xem kết quả: / 0
Bình thườngTuyệt vời 
     PHP5 cung cấp class SimpleXML là một class rất dễ sử dụng, bài này sẽ hướng dẫn các bạn parse file XML trong 7 nốt nhạc.

Đầu tiên, lấy một đoạn XML mẫu để tập tành phân tích:
Code:
<?xml version="1.0"?>
<books>
  <book isbn="978-1594489501">
    <title>A Thousand Splendid Suns</title>
    <author>Khaled Hosseini</author>
    <publisher>Riverhead Hardcover</publisher>
    <amazon_price>14.27</amazon_price>
  </book>
  <book isbn="978-1594489587">
    <title>The Brief Wondrous Life of Oscar Wao</title>
    <author>Junot Diaz</author>
    <publisher>Riverhead Hardcover</publisher>
    <amazon_price>14.97</amazon_price>
  </book>
  <book isbn="978-0545010221">
    <title>Harry Potter and the Deathly Hallows</title>
    <author>J. K. Rowling</author>
    <publisher>Arthur A. Levine Books</publisher>
    <amazon_price>19.24</amazon_price>
  </book>
</books>

Để tạo ra một đối tượng SimpleXmlElement, cách đơn giản là truyền vào một chuỗi hoặc một file:

Code:
// Passing the XML
$books = SimpleXMLElement($XmlData);
//-------------------
// Passing a filename
$books = SimpleXMLElement('books.xml', null, true);

Nhìn vào đoạn XML ví dụ, ta sẽ lấy ra tất cả các book hay của Amazon:
Code:
<?php
// load SimpleXML
$books = new SimpleXMLElement('books.xml', null, true);

echo <<<EOF
<table>
    <tr>
        <th>Title</th>
        <th>Author</th>
        <th>Publisher</th>
        <th>Price at Amazon.com</th>
        <th>ISBN</th>
    </tr>

EOF;
foreach($books as $book) // loop through our books
{
    echo <<<EOF
    <tr>
        <td>{$book->title}</td>
        <td>{$book->author}</td>
        <td>{$book->publisher}</td>
        <td>${$book->amazon_price}</td>
        <td>{$book['isbn']}</td>
    </tr>

EOF;
}
echo '</table>';
?>

Bạn để ý rằng $books (có chữ 's' nhé) là một Element do khái niệm mỗi một file XML thì phải có root element. Vì thế, đừng mong đợi có đối tượng SimpleXml không nhé. Mỗi element có thể có nhiều element con cùng loại hay khác loại, ví dụ này là cùng loại 'book' và class SimpleXmlElement này cho phép ta duyệt qua các element con cùng loại như một array như ví dụ foreach() ở trên.

Cuối cùng, nói về cú pháp truy cập child element và attribute. Bác nào chưa biết khái niệm này nữa thì:
Code:
 <book isbn="978-1594489501">
    <title>A Thousand Splendid Suns</title>
    <author>Khaled Hosseini</author>
    <publisher>Riverhead Hardcover</publisher>
    <amazon_price>14.27</amazon_price>
  </book>

isbn là một attribute, các giá trị của một attribute phải để trong dấu (")
<title>, <author>,... là các child element

Chỉ giải thích tới đây thôi, bác nào có ý định ngâm cứu XML, XML Schema,... thì 5s gợi ý là nên ... từ bỏ ý định ngông cuống thừa thời gian này đi vì có cả năm  may ra học mới xong mà học từ tháng 1-12 thì tới tháng 12 sẽ quên tháng 1 . Cứ việc coi nó như khái niểm HTML đã  học rồi xài cho thoải mái nhá.

Quay về cú pháp, lại coi ví dụ 'simple' trên: $book->title là truy cập child element trong khi $book['isbn'] là truy cập attribute. Done!!!

Đơn giản thế thôi, bạn thấy xử lý XML data có dễ chưa ?

Ví dụ trên, nếu bạn không thích dụng foreach thì có thể dùng biến counter $i, viết lại là $tempBook = $books->book[$i] rồi dùng $tempBook để xử lý.

Giờ thêm vào tí XPath cho nó bằng anh bằng em:

XPath đơn giản là cách chỉ ra đường dẫn "path" trong 1 XML document thông qua các element cha/con theo cú pháp giống như thư mục của linux: /home/user/... Xpath giúp bạn lọc ra các child element trong các element cha cùng loại, gom lại thành mảng và xử lý.

Ví dụ sau giúp bạn lấy ra tất cả các title của book và tất cả các số ISBN:
Code:
$titles = $books->xpath('book/title');
foreach($titles as $title)
{
    echo $title.PHP_EOL;
}
//////////////////////////////////////////////
$isbn = $books->xpath('book/@isbn');
foreach($isbn as $isbn)
{
    echo $isbn.PHP_EOL;
}

Nhớ chú ý cách dùng cú pháp / và /@ nhé.

Giờ parse thử RSS của tuổi trẻ coi sao nè

Code:
<?php
$rss = new SimpleXMLElement('http://www.tuoitre.com.vn/tianyon/RssView.aspx?ChannelID=16', null, true);

echo "<h1><a href='{$rss->channel->link}'>{$rss->channel->title}</a></h1>".PHP_EOL.'<hr />'.PHP_EOL;

foreach($rss->xpath('channel/item') as $item)
{
    echo <<<EOF
<h2><a href='{$item->link}'>{$item->title}</a></h2>
<div>Posted at: {$item->pubDate}</div>
{$item->description}
<hr />

EOF;
}
?>

Cuối cùng,một vài thuộc tính của đối tượng SimpleXmlElement các bạn sẽ quan tâm:
    $value      = trim((string) $element);  // Bản thên element nó là XML, bạn lấy giá trị của element thì ép kiểu về string
    $attributes = $element->attributes();   // lấy tất cả các attribute
    $children   = $element->children();     // lấy các child element
Nguồn http://thegioiweb.vn/Story/vn/laptrinhweb/laptrinhweb_PHP/2008/6/5266.html


 
 

Khắc phục lỗi

Công cụ thiết kế website

Top 10 Add-on “hot” cho Firefox Top 10 Add-on “hot” cho Firefox Firefox vẫn nổi tiếng với hệ ...
Tool upload và download từ server Tool upload và download từ server FTP Commander 7.40 - chương trình ...
Một số trang web cung cấp tool online Một số trang web cung cấp tool online 1. Web 2.0 Badges – Tạo badges ...
Tool hỗ trợ làm flash mạnh mẽ nhất Tool hỗ trợ làm flash mạnh mẽ nhất Với SWiSH Max2 bạn có thể ...
Firebug -kiểm tra website Firebug -kiểm tra website Firebug là một công cụ chủ ...

Ebook

Ebooks Flash CS3 (english) Foundation Flash CS3 for Designers What you’ll ...
24h học Action scipts Dưới đây là tài liệu dùng để học action ...
Ebook học JavaScript Ebook học JavaScript bao gồm cả Tiếng Anh và ...
Ebook web nghe nhạc trực tuyến Bạn đang có ý định làm một website nghe ...
Tài liệu tiếng việt về PHP Biên soạn bởi: Mr. Cảnh Phúc Hiệu trưởng ...

Tin tức

Những tên miền Những tên miền "nguy hiểm nhất thế giới" Đó là những tên miền quốc gia Cameroon (.cm), ...
Tạo website trực tuyến, chuyên nghiệp, miễn phí Tạo website trực tuyến, chuyên nghiệp, miễn phí Nhằm phục vụ cho nhu cầu học tập, trao đổi, ...
Thiết kế Website và Làm thế nào để có 1 website ? Thiết kế Website và Làm thế nào để có 1 website ? Để có một website bạn phải tiến hành những ...
Các loại website Các loại website Có rất nhiều loại website nhưng có thể phân ...
Domain là gì ? Domain là gì ? Tên miền (Domain name) là định danh của website ...

Thăm dò

Bạn quan tâm về website ở điểm nào ?