Blame view

vendor/yiisoft/multiparser/XmlParser.php 3.01 KB
74072a2a   Mihail   add first version...
1
2
3
4
5
6
7
8
9
10
11
  <?php
  /**
   * Created by PhpStorm.
   * User: Cibermag
   * Date: 10.09.2015
   * Time: 17:47
   */
  
  namespace yii\multiparser;
  
  
90ff40df   Mihail   fixed issue with ...
12
13
14
  use common\components\CustomVarDamp;
  use common\components\CustomArrayHelper;
  
6215a30d   Mihail   add converter int...
15
  class XmlParser extends  Parser{
3c4b566f   Mihail   add XlsxParser
16
  
d21c5c5f   Mihail   XMLparser - read ...
17
      public $node;
d21c5c5f   Mihail   XMLparser - read ...
18
  
74072a2a   Mihail   add first version...
19
20
      public function read()
      {
d21c5c5f   Mihail   XMLparser - read ...
21
          $file = $this->file;
90ff40df   Mihail   fixed issue with ...
22
23
          $result = $this->xmlToArray( $file->getPathname() );
  
d21c5c5f   Mihail   XMLparser - read ...
24
          if ( isset($this->node) ) {
d21c5c5f   Mihail   XMLparser - read ...
25
  
90ff40df   Mihail   fixed issue with ...
26
27
28
              $result = $result[ $this->node ];
  
          }
0bec979b   Mihail   finish with xml a...
29
30
  
          return $result;
74072a2a   Mihail   add first version...
31
32
      }
  
74072a2a   Mihail   add first version...
33
34
35
  
      /**
       * Converts an XML string to a PHP array
74072a2a   Mihail   add first version...
36
37
       *
       * @uses recursiveXMLToArray()
d21c5c5f   Mihail   XMLparser - read ...
38
       * @param string $file_path
74072a2a   Mihail   add first version...
39
40
       * @return array
       */
90ff40df   Mihail   fixed issue with ...
41
      protected function xmlToArray( $file_path ) {
74072a2a   Mihail   add first version...
42
  
74072a2a   Mihail   add first version...
43
          try {
d21c5c5f   Mihail   XMLparser - read ...
44
45
              $xml = new \SimpleXMLElement( $file_path, 0, true );
              //\common\components\CustomVarDamp::dumpAndDie($xml->children()->children());
90ff40df   Mihail   fixed issue with ...
46
              $result = $this->recursiveXMLToArray( $xml );
74072a2a   Mihail   add first version...
47
          } catch(Exception $ex) {
d21c5c5f   Mihail   XMLparser - read ...
48
  
74072a2a   Mihail   add first version...
49
50
              throw $ex;
          }
d21c5c5f   Mihail   XMLparser - read ...
51
  
74072a2a   Mihail   add first version...
52
53
54
55
56
          return $result;
      }
  
      /**
       * Convert a XML string to a PHP array recursively. Do not
df1a5df8   Mihail   merge with server
57
       * call this function directly
74072a2a   Mihail   add first version...
58
59
60
61
62
       *
       * @param SimpleXMLElement
       *
       * @return mixed
       */
90ff40df   Mihail   fixed issue with ...
63
64
      protected  function recursiveXMLToArray($xml) {
          if( $xml instanceof \SimpleXMLElement ) {
74072a2a   Mihail   add first version...
65
              $attributes = $xml->attributes();
90ff40df   Mihail   fixed issue with ...
66
67
68
69
70
  
              foreach( $attributes as $key => $value ) {
                  if( $value ) {
                      $attribute_array[$key] = (string) $value;
                  }
74072a2a   Mihail   add first version...
71
              }
90ff40df   Mihail   fixed issue with ...
72
              $previous_xml = $xml;
74072a2a   Mihail   add first version...
73
74
              $xml = get_object_vars($xml);
          }
d21c5c5f   Mihail   XMLparser - read ...
75
  
74072a2a   Mihail   add first version...
76
          if(is_array($xml)) {
90ff40df   Mihail   fixed issue with ...
77
78
79
80
  
              if( count($xml) == 0 )
                  return (string) $previous_xml; // for CDATA
  
74072a2a   Mihail   add first version...
81
              foreach($xml as $key => $value) {
90ff40df   Mihail   fixed issue with ...
82
83
84
85
86
87
                  $row[$key] = $this->recursiveXMLToArray($value);
              }
              if ( is_string($value) ) {
                  // дошли до конца рекурсии
                  // преобразуем ряд согласно конфигурации
                  if ( $this->keys !== NULL ) {
90ff40df   Mihail   fixed issue with ...
88
89
90
91
92
                      // назначим ключи из конфигурации, согласно массиву $keys
                      $row = $this->compareArrayWithKeys( $row );
                  }
                  $row = $this->convert( $row );
  
74072a2a   Mihail   add first version...
93
              }
90ff40df   Mihail   fixed issue with ...
94
95
96
97
98
99
  
  
              if( isset( $attribute_array ) )
                  $row['@'] = $attribute_array; // Attributes
  
              return $row;
74072a2a   Mihail   add first version...
100
          }
74072a2a   Mihail   add first version...
101
102
          return (string) $xml;
      }
90ff40df   Mihail   fixed issue with ...
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
  
      /**
       * @param array $value_arr - текущий ряд, массив, которому нужно назначить конфигурационные ключи ($keys)
       * @return array
       */
      protected function compareArrayWithKeys( array $value_arr ){
          $res = $this->keys;
          foreach ( $this->keys as $key => $value ) {
              if ( array_key_exists( $value, $value_arr ) ) {
                  $res[$key] = $value_arr[$value];
              }
          }
          return $res;
      }
  
74072a2a   Mihail   add first version...
118
  }