当前位置: 首页 > 图文教程 > 网络编程 > PHP > 使用PHP 5.0 轻松解析XML文档(2)

PHP
php调用mysql存储过程
PHP+.htaccess实现全站静态HTML文件GZIP压缩传输(一)
PHP中HTTP方式下的Gzip压缩传输方法举偶
隐藏X-Space个人空间下方版权方法隐藏X-Space个人空间标题隐藏X-Space个人空间管理版权方法
如何提高PHP速度
发布一个用PHP fsockopen写的HTTP下载的类
php公用函数列表[正则]
实现了一个PHP5的getter/setter基类的代码
php简单封装了一些常用JS操作
Smarty+QUICKFORM小小演示
给php新手谈谈我的学习心得
NOD32 v2.70.32 简体中文封装版 提供下载了
个人站长制做网页常用的php代码
收集的php编写大型网站问题集
如何从一个php文件向另一个地址post数据,不用表单和隐藏的变量的
php下实现农历日历的代码
php+dojo 的数据库保存拖动布局的一个方法dojo 这里下载
php网页后退不再出现过期
PHP实现用户认证及管理完全源码
用PHP制作的意见反馈表源码

使用PHP 5.0 轻松解析XML文档(2)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 208 ::
收藏到网摘: n/a

文件:SimpleDocumentParser.php

<?php/** *========================================================= * * @author hahawen(大龄青年) * @since 2004-12-04 * @copyright Copyright (c) 2004, NxCoder Group * *========================================================= *//** * class SimpleDocumentParser * use SAX parse xml file, and build SimpleDocumentObject * all this pachage's is work for xml file, and method is action as DOM. * * @package SmartWeb.common.xml * @version 1.0 */class SimpleDocumentParser{ private $domRootObject = null; private $currentNO = null; private $currentName = null; private $currentValue = null; private $currentAttribute = null; public function getSimpleDocument() { return $this->domRootObject; } public function parse($file) { $xmlParser = xml_parser_create(); xml_parser_set_option($xmlParser,XML_OPTION_CASE_FOLDING, 0); xml_parser_set_option($xmlParser,XML_OPTION_SKIP_WHITE, 1); xml_parser_set_option($xmlParser, XML_OPTION_TARGET_ENCODING, 'UTF-8'); xml_set_object($xmlParser, $this); xml_set_element_handler($xmlParser, "startElement", "endElement"); xml_set_character_data_handler($xmlParser, "characterData"); if (!xml_parse($xmlParser, file_get_contents($file))) die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xmlParser)),
        xml_get_current_line_number($xmlParser))); xml_parser_free($xmlParser); } private function startElement($parser, $name, $attrs) { $this->currentName = $name; $this->currentAttribute = $attrs; if($this->currentNO == null) { $this->domRootObject = new SimpleDocumentRoot($name); $this->currentNO = $this->domRootObject; } else { $this->currentNO = $this->currentNO->createNode($name, $attrs); } } private function endElement($parser, $name) { if($this->currentName==$name) { $tag = $this->currentNO->getSeq(); $this->currentNO = $this->currentNO->getPNodeObject(); if($this->currentAttribute!=null && sizeof($this->currentAttribute)>0) $this->currentNO->setValue($name, array('value'=>$this->currentValue,
       'attrs'=>$this->currentAttribute)); else $this->currentNO->setValue($name, $this->currentValue); $this->currentNO->removeNode($tag); } else { $this->currentNO = (is_a($this->currentNO, 'SimpleDocumentRoot'))? null:
        $this->currentNO->getPNodeObject(); } } private function characterData($parser, $data) { $this->currentValue = iconv('UTF-8', 'GB2312', $data); } function __destruct() { unset($this->domRootObject); }}?>

  文件:SimpleDocumentBase.php

<?php/** *========================================================= * * @author hahawen(大龄青年) * @since 2004-12-04 * @copyright Copyright (c) 2004, NxCoder Group * *========================================================= *//** * abstract class SimpleDocumentBase * base class for xml file parse * all this pachage's is work for xml file, and method is action as DOM. * * 1\ add/update/remove data of xml file. * 2\ explode data to array. * 3\ rebuild xml file * * @package SmartWeb.common.xml * @abstract * @version 1.0 */abstract class SimpleDocumentBase{ private $nodeTag = null; private $attributes = array(); private $values = array(); private $nodes = array(); function __construct($nodeTag) { $this->nodeTag = $nodeTag; } pub