code: protected function domDocumentArray($root)
      {
          $result = [];
  
          if ($root->hasAttributes()) {
              foreach ($root->attributes as $attribute) {
                  $result['@attributes'][$attribute->name] = $attribute->value;
              }
          }
  
          if ($root->hasChildNodes()) {
              if (1 == $root->childNodes->length) {
                  $child = $root->childNodes->item(0);
                  if (in_array($child->nodeType, [XML_TEXT_NODE, XML_CDATA_SECTION_NODE]) && !empty($child->nodeValue)) {
                      $result['_value'] = $child->nodeValue;
  
                      return 1 == count($result)
                          ? $result['_value']
                          : $result;
                  }
              }
              $groups = [];
              foreach ($root->childNodes as $child) {
                  if (!isset($result[$child->nodeName])) {
                      $result[$child->nodeName] = $this->domDocumentArray($child);
                  } else {
                      if (!isset($groups[$child->nodeName])) {
                          $result[$child->nodeName] = [$result[$child->nodeName]];
                          $groups[$child->nodeName] = 1;
                      }
                      $result[$child->nodeName][] = $this->domDocumentArray($child);
                  }
              }
          }
  
          return $result;
      }
docs: Convert a DOM Document into a nested array.
  
  @param $root
  
  @return array|mixed