diff --git a/mod/scorm/xml2array.class.php b/mod/scorm/xml2array.class.php new file mode 100644 index 00000000000..db3e34bafa5 --- /dev/null +++ b/mod/scorm/xml2array.class.php @@ -0,0 +1,56 @@ +parse($strYourXML); + print_r($arrOutput); //print it out, or do whatever! + +*/ +class xml2Array { + + var $arrOutput = array(); + var $resParser; + var $strXmlData; + + function parse($strInputXML) { + + $this->resParser = xml_parser_create ('UTF-8'); + xml_set_object($this->resParser,$this); + xml_set_element_handler($this->resParser, "tagOpen", "tagClosed"); + + xml_set_character_data_handler($this->resParser, "tagData"); + + $this->strXmlData = xml_parse($this->resParser,$strInputXML ); + if(!$this->strXmlData) { + die(sprintf("XML error: %s at line %d", + xml_error_string(xml_get_error_code($this->resParser)), + xml_get_current_line_number($this->resParser))); + } + + xml_parser_free($this->resParser); + + return $this->arrOutput; + } + + function tagOpen($parser, $name, $attrs) { + $tag=array("name"=>$name,"attrs"=>$attrs); + array_push($this->arrOutput,$tag); + } + + function tagData($parser, $tagData) { + if(trim($tagData)) { + if(isset($this->arrOutput[count($this->arrOutput)-1]['tagData'])) { + $this->arrOutput[count($this->arrOutput)-1]['tagData'] .= utf8_decode($tagData); + } else { + $this->arrOutput[count($this->arrOutput)-1]['tagData'] = utf8_decode($tagData); + } + } + } + + function tagClosed($parser, $name) { + $this->arrOutput[count($this->arrOutput)-2]['children'][] = $this->arrOutput[count($this->arrOutput)-1]; + array_pop($this->arrOutput); + } +} +?> \ No newline at end of file