file; $result = self::xml2array( $file->getPathname() ); if ( isset($this->node) ) { $result = $result[$this->node]; } //@todo переделать на универсальный способ, а для фрейма создать отдельный класс $key_column = \Yii::$app->multiparser->getConfiguration('xml','basic_column'); $key_column = array_flip($key_column); $result = \Yii::$app->multiparser->convertToAssocArray($result, $key_column); foreach ( $result as &$value ) { if (is_array($value)) { $value = \Yii::$app->multiparser->convertByConfiguration( $value, $this->converter_conf ); } } return $result; } public function setup() { } /** * Converts an XML string to a PHP array * * @uses recursiveXMLToArray() * @param string $file_path * @return array */ protected static function xml2array( $file_path ) { try { $xml = new \SimpleXMLElement( $file_path, 0, true ); //\common\components\CustomVarDamp::dumpAndDie($xml->children()->children()); $result = self::recursiveXMLToArray( $xml ); } catch(Exception $ex) { throw $ex; } return $result; } /** * Convert a XML string to a PHP array recursively. Do not * call this function directly, Please use {@link Convert::xml2array()} * * @param SimpleXMLElement * * @return mixed */ protected static function recursiveXMLToArray($xml) { if(is_object($xml) && get_class($xml) == 'SimpleXMLElement') { $attributes = $xml->attributes(); foreach($attributes as $k => $v) { if($v) $a[$k] = (string) $v; } $x = $xml; $xml = get_object_vars($xml); } //\common\components\CustomVarDamp::dump($xml); if(is_array($xml)) { if(count($xml) == 0) return (string) $x; // for CDATA foreach($xml as $key => $value) { $r[$key] = self::recursiveXMLToArray($value); } if(isset($a)) $r['@'] = $a; // Attributes return $r; } //\common\components\CustomVarDamp::dumpAndDie($xml); return (string) $xml; } }