Trong bài viết này, tôi sẽ hướng dẫn chuyển associative arrays sang XML.
Xin phép được giữ nguyên từ associative arrays mà không dịch (kèm thêm một số từ như class, function, ...), bởi vì dịch ra nó không được chuẩn và hay cho lắm.
Bạn có thể hiểu nó là một mảng, mà mỗi một chìa sẽ mở được một khóa. mỗi một key sẽ có một dữ liệu. (hơi khó hiểu :">)
Chúng ta khởi tạo mảng với một vài giá trị
<?php
$info['clicks'] = 203;
$info['platform'] = array( 'windows' => 4, 'linux' => 6, 'macosx' => 2 );
$info['browser'] = array( 'Firefox' => 20 , 'Chrome' => 10 );
Bây giờ sẽ bắt đầu dùng class XMLWriter.
Đầu tiên, khởi tạo một đối tượng (object) đại diện (thể hiện) cho class. Nó được sử dụng để truy cập tất cả các function của class để ghi XML.
$xml = new XmlWriter();
$xml->openMemory();
$xml->startDocument( ‘1.0’, ‘utf-8’ );
$xml->startElement( ‘infomation’) ;
write_xml( $xml, $info );
$xml->endElement();
echo $xml->outputMemory( true )
- Dùng openMemory() vì tôi sẽ viết vào bộ đệm (buffer) chứ không ghi vào thành tập tin. Nếu bạn muốn ghi vào tập tin thì có thể sử dụng openURI(chuỗi uri)
- Gọi startDocument() với tham số là phiên bản xml và kiểu mã hóa
- startElement() sẽ ghi element tag đầu tiên (bao tất cả các tag info)
- Gọi function
write_xml()
tự viết với tham số là object $xml và mảng $info.
function write_xml( XMLWriter $xml, $data ) {
foreach( $data as $key => $value ) {
if( is_array( $value )) {
$xml->startElement( $key );
write_xml( $xml, $value );
$xml->endElement( );
continue;
}
$xml->writeElement( $key, $value );
}
}
- Hàm trên dùng đệ quy phân tách mảng và chuyển nó sang xml bằng cách sử dụng startElement() và endElement() của class XML.
- Cuối cùng in ra màn hình xml document từ bộ nhớ
Mẫu in ra màn hình của ví dụ trên
<?xml version="1.0" encoding="UTF-8"?>
<infomation>
<clicks> 10 </clicks>
<platform>
<windows> 4 </windows>
<linux> 6 </linux>
<macosx> 2 </macosx>
</platform>
<browser>
<Firefox> 20 </Firefox>
<Chrome> 10 </Chrome>
</browser>
</infomation>