SimpleExcel\Parser\XMLParser::parseDOM PHP Method

parseDOM() private method

Process the loaded file/string
private parseDOM ( SimpleXMLElement $xml ) : boolean
$xml SimpleXMLElement SimpleXMLElement object of XML
return boolean
    private function parseDOM($xml)
    {
        // get XML namespace
        $xmlns = $xml->getDocNamespaces();
        // check file extension and XML namespace
        if ($xmlns['ss'] != 'urn:schemas-microsoft-com:office:spreadsheet') {
            throw new \Exception('Document namespace isn\'t a valid Excel XML 2003 Spreadsheet', SimpleExcelException::INVALID_DOCUMENT_NAMESPACE);
        }
        // extract document properties
        $doc_props = (array) $xml->DocumentProperties;
        $this->table_arr['doc_props'] = $doc_props;
        $rows = $xml->Worksheet->Table->Row;
        $row_num = 1;
        $this->table_arr = array('doc_props' => array(), 'table_contents' => array());
        // loop through all rows
        foreach ($rows as $row) {
            // check whether ss:Index attribute exist in this row
            $row_index = $row->xpath('@ss:Index');
            // if exist, push empty value until the specified index
            if (count($row_index) > 0) {
                $gap = $row_index[0] - count($this->table_arr['table_contents']);
                for ($i = 1; $i < $gap; $i++) {
                    array_push($this->table_arr['table_contents'], array('row_num' => $row_num, 'row_contents' => ''));
                    $row_num += 1;
                }
            }
            $cells = $row->Cell;
            $row_attrs = $row->xpath('@ss:*');
            $row_attrs_arr = $this->getAttributes($row_attrs);
            $row_arr = array();
            $col_num = 1;
            // loop through all row's cells
            foreach ($cells as $cell) {
                // check whether ss:Index attribute exist
                $cell_index = $cell->xpath('@ss:Index');
                // if exist, push empty value until the specified index
                if (count($cell_index) > 0) {
                    $gap = $cell_index[0] - count($row_arr);
                    for ($i = 1; $i < $gap; $i++) {
                        array_push($row_arr, array('row_num' => $row_num, 'col_num' => $col_num, 'datatype' => '', 'value' => ''));
                        $col_num += 1;
                    }
                }
                // get all cell and data attributes
                //$cell_attrs = $cell->xpath('@ss:*');
                //$cell_attrs_arr = $this->getAttributes($cell_attrs);
                $data_attrs = $cell->Data->xpath('@ss:*');
                $data_attrs_arr = $this->getAttributes($data_attrs);
                $cell_datatype = isset($data_attrs_arr['Type']) ? $data_attrs_arr['Type'] : 'String';
                // extract data from cell
                $cell_value = (string) $cell->Data;
                // escape input from HTML tags
                $cell_value = filter_var($cell_value, FILTER_SANITIZE_SPECIAL_CHARS);
                // push column array
                array_push($row_arr, array('row_num' => $row_num, 'col_num' => $col_num, 'datatype' => $cell_datatype, 'value' => $cell_value));
                $col_num += 1;
            }
            // push row array
            array_push($this->table_arr['table_contents'], array('row_num' => $row_num, 'row_contents' => $row_arr));
            $row_num += 1;
        }
        return true;
    }