Nếu bạn đang gặp khó khăn trong việc lấy dữ liệu từ XML thì bài viết này sẽ giúp bạn dễ dàng quản lý và làm chủ được tập tin XML, ví dụ rất đơn giản nhưng thật sự hữu ích cho những bạn mới lập trình, các bạn đừng nên bỏ qua.

Thao tác với XML trong PHP

Ví dụ kiểm tra, thêm, xóa, lấy địa chỉ email từ XML.

XML

Tập tin email.xml nằm trong thư mục data có định dạng như sau:

<?xml version="1.0"?>
<emails>
    <email>
        <value>[email protected]</value>
        <date>2016-12-09 04:05:05</date>
    </email>
    <email>
        <value>[email protected]</value>
        <date>2016-12-09 04:07:54</date>
    </email>
</emails>

PHP

<?php
    /*
     * Kiểm tra email tồn tại
     */
    function check_email($email, $url = './data/email.xml') {
        $doc = new DOMDocument('1.0');
        $doc->load($url);
        $emails = $doc->getElementsByTagName('email');
        foreach ($emails as $e) {
            $val = $e->getElementsByTagName('value');
            if ($email == $val->item(0)->nodeValue) {
                return true;
            }
        }
        return false;
    }

    /*
     * Thêm email
     */
    function write_email($email, $url = './data/email.xml') {
        $xml = simplexml_load_file($url);
        $entry = $xml->addChild('email');
        $entry->addChild('value', $email);
        $entry->addChild('date', date('Y-m-d H:i:s', time()));
        $doc = new DOMDocument('1.0');
        $doc->formatOutput = true;
        $doc->preserveWhiteSpace = true;
        $doc->loadXML($xml->asXML(), LIBXML_NOBLANKS);
        $doc->save($url);
    }

    /*
     * Lấy danh sách email
     */
    function get_emails($url = './data/email.xml') {
        $doc = new DOMDocument('1.0');
        $doc->load($url);
        $emails = $doc->getElementsByTagName('email');
        $email_list = [];
        foreach ($emails as $e) {
            $val = $e->getElementsByTagName('value');
            $dat = $e->getElementsByTagName('date');
            $email_list[] = array(
                'email' => $val->item(0)->nodeValue,
                'date' => $dat->item(0)->nodeValue,
            );
        }
        return $email_list;
    }

    /*
     * Xóa email
     */
    function delete_email($email, $url = './data/email.xml') {
        $doc = new DOMDocument('1.0');
        $doc->load($url);
        $the_document = $doc->documentElement;
        $emails = $the_document->getElementsByTagName('email');
        $node = null;
        foreach ($emails as $e) {
            $val = $e->getElementsByTagName('value');
            if ($email == $val->item(0)->nodeValue) {
                $node = $e;
                break;
            }
        }
        if ($node != null) {
            $the_document->removeChild($node);
        }
        $doc->save($url);
    }
?>

Sử dụng

<?php
    if (!check_email('[email protected]')) { // Kiểm tra email tồn tại
        write_email('[email protected]'); // Thêm email
    }

    $data = get_emails();
    if ($data) {
        foreach ($data as $row) {
            // Xuất danh sách email
            echo $row['email'];
            echo ' thêm ngày ';
            echo $row['date'];
        }
    }

    if (check_email('[email protected]')) { // Kiểm tra email tồn tại
        delete_email('[email protected]'); // Xóa email
    }
?>

Chúc các bạn thành công!