next(); * * $reader->parseInnerTree() will parse the entire sub-tree, and advance to * the next element. * * @return mixed */ public 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 array */ private static function traverse($elems) { $result = []; foreach ($elems as $elem) { if ('{DAV:}property' !== $elem['name']) { 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; } }