tagstack = array(); // contain the open tags till now $this->xmlvals = array(); $this->xmlvarArrPos = $this->xmlvals; // temporary variable to hold the current tag position $this->xmlfile = $filename; } function readDatabase() { // read the XML database $data = implode("", file($this->xmlfile)); $parser = xml_parser_create(); xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0); xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1); xml_parse_into_struct($parser, $data, $values, $tags); xml_parser_free($parser); $tagStackPointer = 0; foreach($values as $key => $val) // { if($val['type'] == "open") { array_push($this->tagstack, $val['tag']); $this->getArrayPath(); if(count($this->xmlvarArrPos) > 0 && (!array_key_exists(0,$this->xmlvarArrPos))) { $temp1 = $this->xmlvarArrPos; $this->xmlvarArrPos = array(); $this->xmlvarArrPos[0] = $temp1; array_push($this->tagstack, 1); } else if(count($this->xmlvarArrPos) && array_key_exists(0,$this->xmlvarArrPos)){ $opncount = count($this->xmlvarArrPos); array_push($this->tagstack, $opncount); } $tagStackPointer += 1; }else if($val['type'] == "close") { while( $val['tag'] != ($lastOpened = array_pop($this->tagstack))){} }else if($val['type'] == "complete") { $this->getArrayPath(); if(count($this->xmlvarArrPos) && array_key_exists($val['tag'],$this->xmlvarArrPos)) { if(array_key_exists(0,$this->xmlvarArrPos[$val['tag']])) { $elementCount = count($this->xmlvarArrPos[$val['tag']]); $this->xmlvarArrPos[$val['tag']][$elementCount] = $val['value']; }else { $temp1 = $this->xmlvarArrPos[$val['tag']]; $this->xmlvarArrPos[$val['tag']] = array(); $this->xmlvarArrPos[$val['tag']][0] = $temp1; $this->xmlvarArrPos[$val['tag']][1] = $val['value']; } } else { $this->xmlvarArrPos[$val['tag']] = isset($val['value']) ? $val['value'] : null; } } } reset($this->xmlvals); return $this->xmlvals; } function getArrayPath() { reset($this->xmlvals); $this->xmlvarArrPos = &$this->xmlvals; foreach($this->tagstack as $key) { $this->xmlvarArrPos = &$this->xmlvarArrPos[$key]; } } } ?>