|
源代码网推荐
/* Here are the XML functions needed by expat */
/* when expat hits an opening tag, it fires up this function */
function startElement($parser, $name, $attrs) {
array_push($this->current_tag, $name); // add tag to the cur. tag array
$curtag = implode("_",$this->current_tag); // piece together tag
/* this tracks what array index we are on for this tag */
if(isset($this->tagtracker["$curtag"])) { $this->tagtracker["$curtag"]++; } else { $this->tagtracker["$curtag"]=0; }
/* if there are attributes for this tag, we set them here. */
if(count($attrs)>0) { $j = $this->tagtracker["$curtag"]; if(!$j) $j = 0;
if(!is_object($GLOBALS[$this->identifier]["$curtag"][$j])) { $GLOBALS[$this->identifier]["$curtag"][$j] = new xml_container; }
$GLOBALS[$this->identifier]["$curtag"][$j]->store("attributes",$attrs); }
} // end function startElement
/* when expat hits a closing tag, it fires up this function */
function endElement($parser, $name) {
$curtag = implode("_",$this->current_tag); // piece together tag // before we pop it off, // so we can get the correct // cdata
if(!$this->tagdata["$curtag"]) { $popped = array_pop($this->current_tag); // or else we screw up where we are return; // if we have no data for the tag } else { $TD = $this->tagdata["$curtag"]; unset($this->tagdata["$curtag"]); }
$popped = array_pop($this->current_tag); // we want the tag name for // the tag above this, it // allows us to group the // tags together in a more // intuitive way.
if(sizeof($this->current_tag) == 0) return; // if we aren"t in a tag
$curtag = implode("_",$this->current_tag); // piece together tag // this time for the arrays
$j = $this->tagtracker["$curtag"]; if(!$j) $j = 0;
if(!is_object($GLOBALS[$this->identifier]["$curtag"][$j])) { $GLOBALS[$this->identifier]["$curtag"][$j] = new xml_container; }
$GLOBALS[$this->identifier]["$curtag"][$j]->store($name,$TD); #$this->tagdata["$curtag"]); unset($TD); return TRUE; }
/* when expat finds some internal tag character data, it fires up this function */
function characterData($parser, $cdata) { $curtag = implode("_",$this->current_tag); // piece together tag $this->tagdata["$curtag"] .= $cdata; }
/* this is the constructor: automatically called when the class is initialized */
function xml($data,$identifier="xml") {
$this->identifier = $identifier;
// create parser object $this->xml_parser = xml_parser_create();
// set up some options and handlers xml_set_object($this->xml_parser,$this); xml_parser_set_option($this->xml_parser,XML_OPTION_CASE_FOLDING,0); xml_set_element_handler($this->xml_parser, "startElement", "endElement"); xml_set_character_data_handler($this->xml_parser, "characterData");
if (!xml_parse($this->xml_parser, $data, TRUE)) { sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($this->xml_parser)), xml_get_current_line_number($this->xml_parser)); }
// we are done with the parser, so let"s free it xml_parser_free($this->xml_parser);
} // end constructor: function xml()
} // thus, we end our class xml
?>
源代码网供稿. |