Аналог json_decode() для XML на PHP
Работает с помощью XMLWriter.
Для тестов был выбран следующий массив:
json_encode():
xml_encode():
Как видим, все работает даже со вложенными массивами.
Полный код, включая функцию + usage:
Для тестов был выбран следующий массив:
$info = array(
'id' => 123,
'login' => 'test',
'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
'email' => 'test@test.com',
'active' => true,
'languages' => array('PHP', 'javascript', 'C#')
);
json_encode():
{
"id": 123,
"login": "test",
"password": "5f4dcc3b5aa765d61d8327deb882cf99",
"email": "test@test.com",
"active": true,
"languages": [
"PHP",
"javascript",
"C#"
]
}
xml_encode():
<?xml version="1.0" encoding="UTF-8"?>
<user>
<id>123</id>
<login>test</login>
<password>5f4dcc3b5aa765d61d8327deb882cf99</password>
<email>test@test.com</email>
<active>1</active>
<languages>
<value>PHP</value>
<value>javascript</value>
<value>C#</value>
</languages>
</user>
Как видим, все работает даже со вложенными массивами.
Полный код, включая функцию + usage:
header("Content-Type: text/xml");
function xml_encode($data, $root = 'response', $version = '1.0', $encoding = 'UTF-8')
{
function getXML($data, $writer)
{
foreach ($data as $key => $val) {
if (is_numeric($key)) {
$key = 'value';
}
if (is_array($val)) {
$writer->startElement($key);
getXML($val, $writer);
$writer->endElement();
} else {
$writer->writeElement($key, $val);
}
}
}
$writer = new XMLWriter();
$writer->openMemory();
$writer->startDocument($version, $encoding);
$writer->startElement($root);
if (is_array($data)) {
getXML($data, $writer);
}
$writer->endElement();
return $writer->outputMemory();
}
$info = array(
'id' => 123,
'login' => 'test',
'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
'email' => 'test@test.com',
'active' => true,
'languages' => array('PHP', 'javascript', 'C#')
);
echo xml_encode($info, 'user');
10.02.2015, 10:18 -
Категория: Статьи » Программирование » PHP