next(); * * $reader->parseInnerTree() will parse the entire sub-tree, and advance to * the next element. * * @param Reader $reader * @return mixed */ static function xmlDeserialize(Reader $reader) { $elems = $reader->parseInnerTree(); $obj = new self(); $obj->properties = self::traverse($elems); return $obj; } /** * This method is used by deserializeXml, to recursively parse the * {DAV:}property elements. * * @param array $elems * @return void */ private static function traverse($elems) { $result = []; foreach ($elems as $elem) { if ($elem['name'] !== '{DAV:}property') { continue; } $namespace = isset($elem['attributes']['namespace']) ? $elem['attributes']['namespace'] : 'DAV:'; $propName = '{' . $namespace . '}' . $elem['attributes']['name']; $value = null; if (is_array($elem['value'])) { $value = self::traverse($elem['value']); } $result[$propName] = $value; } return $result; } }