PHP中的类-操作XML(3)
2008-05-01 04:18
591 查看
XML:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
/* 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
?>
相关文章推荐
- PHP DOM操作XML文档,查询遍历结点元素
- PHP DOM操作xml文档,修改元素
- php5&Flash as2操作xml
- PHP操作HTML/XML的类库 QueryPath需要启用javascri
- php xml操作
- xml之phpdom操作
- 用php操作xml的方法
- PHP扩展之XML操作(四)——XMLReader
- PHP通过DOM操作XML
- XMl入门介绍及php操作XML
- DOM基础及php读取xml内容操作的方法
- PHPdom操作查找xml标签文本
- php对图书的增删改查操作(xml作为数据存储机制)
- php DOMElement 操作xml 文档的示例代码
- PHP通过DOM操作XML
- PHP对XML文件操作之属性与方法讲解
- php之SimpleXml操作xml
- PHP操作XML作为数据库的类
- php simpleXML操作xml的用法
- php操作xml详解