<?php
//github.com/adamplumb/XMLSerializer
//A minimal version of the class
class XMLSerializer {
private $root;
private $indent;
function __construct($root = "root", $indent = " ") {
$this->root = $root;
$this->indent = $indent;
}
function serialize($data) {
return $this->tag($this->root, $data, 0);
}
private function tag($name, $value, $level) {
if (is_object($value)) {
$value = (array)$value;
}
$pad = str_repeat($this->indent, $level);
$eol = $this->indent === "" ? "" : "\n";
if (is_array($value)) {
//a list is a repeated tag, not a nested one
if (array_is_list($value) && $value !== []) {
$items = "";
foreach ($value as $item) {
$items .= $this->tag($name, $item, $level);
}
return $items;
}
$body = "";
foreach ($value as $key => $item) {
$body .= $this->tag($key, $item, $level + 1);
}
return "$pad<$name>$eol$body$pad</$name>$eol";
}
return "$pad<$name>" . htmlspecialchars((
string)$value) . "</$name>$eol";
}
}
class Data {
public $nums = [];
}
$data = new Data();
$data->nums = [2, 3, 5, 7];
$serializer = new XMLSerializer('data');
$data_s = $serializer->serialize((array)$data);
//<data>
// <nums>2</nums>
// <nums>3</nums>
// <nums>5</nums>
// <nums>7</nums>
//</data>
echo "data_s is ", $data_s;