[commit] r6486 - freeswitch/trunk/scripts/contrib/trixter/xml-cdr
Author: trixter Date: Tue Dec 4 06:00:48 2007 New Revision: 6486 Modified: freeswitch/trunk/scripts/contrib/trixter/xml-cdr/Parse_XML_CDR.php Log: New and improved, mirrors the structure of the XML more closely, use a print_r to test the output and see what is there and how its formatted Modified: freeswitch/trunk/scripts/contrib/trixter/xml-cdr/Parse_XML_CDR.php ============================================================================== --- freeswitch/trunk/scripts/contrib/trixter/xml-cdr/Parse_XML_CDR.php (original) +++ freeswitch/trunk/scripts/contrib/trixter/xml-cdr/Parse_XML_CDR.php Tue Dec 4 06:00:48 2007 @@ -7,8 +7,13 @@ var $_parser = 0; var $_showAttribs; var $_level = 0; + var $currentTag; + var $_CDR=array(); + var $_callflowcnt=0; + var $_iscallflow=0; function Parse_CDR_XML(&$data,$showattribs = false) { + $data = stripslashes(preg_replace('/<.xml (.*?)>(.*)/',"\\2",$data)); $data = preg_replace("/<(.*?)><(.*?)><\/(.*?)>/","<\\1>\\2</\\3>",$data); $this->_showAttribs = $showattribs; $this->_parser = xml_parser_create(); @@ -30,7 +35,7 @@ function & ReturnArray() { - return $this->_data[0]; + return $this->_CDR; } @@ -40,52 +45,88 @@ function _startElement($parser, $name, $attrs){ + $this->_ElementName=""; if (!isset($this->_rep[$name])) $this->_rep[$name] = 0; - if ($name != "cdr") { - $this->_addElement($name,$this->_data[$this->_level],$attrs,true); - $this->_name[$this->_level] = $name; - $this->_level++; + switch ($name) { + case "cdr": + break; + case "app_log": + case "variables": + if(!isset($this->_CDR[$name])) { + $this->_CDR[$name]=array(); + } + $this->currentTag = $name; + break; + case "application": + if($this->_iscallflow) { + $this->_CDR[$this->currentTag][$this->_callflowcnt]['extension']['application'][]=$attrs; + } else { + $this->_CDR[$this->currentTag][]=$attrs; + } + break; + case "callflow": + $this->_CDR[$name]=array(); + $this->currentTag = $name; + foreach ($attrs as $key => $value) { + $this->_CDR[$this->currentTag][$this->_callflowcnt][$key]=$value; + } + $this->_iscallflow=1; + break; + case "extension": + foreach ($attrs as $key => $value) { + $this->_CDR[$this->currentTag][$this->_callflowcnt]['extension'][$key]=$value; + } + break; + case "caller_profile": + case "times": + $this->currentTag = $name; + break; + default: + $this->_ElementName=$name; + break; } } function _endElement($parser,$name){ - if (isset($this->_name[$this->_level - 1])) { - if (isset($this->_data[$this->_level])){ - $this->_addElement($this->_name[$this->_level - 1],$this->_data[$this->_level - 1],$this->_data[$this->_level],false); - } - unset($this->_data[$this->_level]); - $this->_level--; - $this->_rep[$name]++; + $this->_ElementName=""; + switch ($name) { + case "callflow": + $this->_callflowcnt++; + $this->_iscallflow=0; + break; } + } function _cdata($parser, $data) { - if ($this->_name[$this->_level - 1]) { - $this->_addElement($this->_name[$this->_level - 1],$this->_data[$this->_level - 1],$data,false); + switch($this->currentTag) { + case "cdr": + return; + break; + case "app_log": + return; + break; + case "caller_profile": + case "times": + if(isset($data) && $this->_ElementName != "" && + !isset($this->_CDR[$this->currentTag][$this->_ElementName]) + ) { + + $this->_CDR['callflow'][$this->_callflowcnt][$this->currentTag][$this->_ElementName]=$data; + } + return; + break; } - } - - - function _addElement(&$name,&$start,$add = array(),$isattribs = false) { - if (((sizeof($add) == 0 && is_array($add)) || !$add) && !is_numeric($add)) { - if (!isset($start[$name])) $start[$name] = ''; - $add = ''; + if(isset($data) && $this->_ElementName != "" && + !isset($this->_CDR[$this->currentTag][$this->_ElementName]) + ) { + $this->_CDR[$this->currentTag][$this->_ElementName]=$data; } - - - $update = &$start[$name]; - - if ($isattribs && !$this->_showAttribs) return; - elseif ($isattribs) $this->_data['_Attributes_'][$this->_level][$name][] = $add; - elseif (is_array($add) && is_array($update)) $update += $add; - elseif (is_array($update)) return; - elseif (is_array($add)) $update = $add; - elseif ($add || is_numeric($add)) $update .= "$add"; } - + } ?>
participants (1)
-
Freeswitch SVN