Аналог json_decode() для XML на PHP

Работает с помощью XMLWriter.

Для тестов был выбран следующий массив:

$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');



Просмотров: 2061
10.02.2015, 10:18 -

Категория: Статьи » Программирование » PHP