⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parser.php

📁 F2blog v1.1 beta 12.27更新说明 1、后台编辑器增加了文本粘贴与从WORD粘贴
💻 PHP
📖 第 1 页 / 共 2 页
字号:
    /**     * Reset the parser.     *     * This allows you to use one parser instance     * to parse multiple XML documents.     *     * @access   public     * @return   boolean|object     true on success, PEAR_Error otherwise     */    function reset()    {        $result = $this->_create();        if ($this->isError( $result )) {            return $result;        }        return true;    }    // }}}    // {{{ setInputFile()    /**     * Sets the input xml file to be parsed     *     * @param    string      Filename (full path)     * @return   resource    fopen handle of the given file     * @throws   XML_Parser_Error     * @see      setInput(), setInputString(), parse()     * @access   public     */    function setInputFile($file)    {        /**         * check, if file is a remote file         */        if (eregi('^(http|ftp)://', substr($file, 0, 10))) {            if (!ini_get('allow_url_fopen')) {            	return $this->raiseError('Remote files cannot be parsed, as safe mode is enabled.', XML_PARSER_ERROR_REMOTE);            }        }                $fp = @fopen($file, 'rb');        if (is_resource($fp)) {            $this->fp = $fp;            return $fp;        }        return $this->raiseError('File could not be opened.', XML_PARSER_ERROR_FILE_NOT_READABLE);    }    // }}}    // {{{ setInputString()        /**     * XML_Parser::setInputString()     *      * Sets the xml input from a string     *      * @param string $data a string containing the XML document     * @return null     **/    function setInputString($data)    {        $this->fp = $data;        return null;    }        // }}}    // {{{ setInput()    /**     * Sets the file handle to use with parse().     *     * You should use setInputFile() or setInputString() if you     * pass a string      *     * @param    mixed  $fp  Can be either a resource returned from fopen(),     *                       a URL, a local filename or a string.     * @access   public     * @see      parse()     * @uses     setInputString(), setInputFile()     */    function setInput($fp)    {        if (is_resource($fp)) {            $this->fp = $fp;            return true;        }        // see if it's an absolute URL (has a scheme at the beginning)        elseif (eregi('^[a-z]+://', substr($fp, 0, 10))) {            return $this->setInputFile($fp);        }        // see if it's a local file        elseif (file_exists($fp)) {            return $this->setInputFile($fp);        }        // it must be a string        else {            $this->fp = $fp;            return true;        }        return $this->raiseError('Illegal input format', XML_PARSER_ERROR_INVALID_INPUT);    }    // }}}    // {{{ parse()    /**     * Central parsing function.     *     * @return   true|object PEAR error     returns true on success, or a PEAR_Error otherwise     * @access   public     */    function parse()    {        /**         * reset the parser         */        $result = $this->reset();        if ($this->isError($result)) {            return $result;        }        // if $this->fp was fopened previously        if (is_resource($this->fp)) {                    while ($data = fread($this->fp, 4096)) {                if (!$this->_parseString($data, feof($this->fp))) {                    $error = &$this->raiseError();                    $this->free();                    return $error;                }            }        // otherwise, $this->fp must be a string        } else {            if (!$this->_parseString($this->fp, true)) {                $error = &$this->raiseError();                $this->free();                return $error;            }        }        $this->free();        return true;    }    /**     * XML_Parser::_parseString()     *      * @param string $data     * @param boolean $eof     * @return bool     * @access private     * @see parseString()     **/    function _parseString($data, $eof = false)    {        return xml_parse($this->parser, $data, $eof);    }        // }}}    // {{{ parseString()    /**     * XML_Parser::parseString()     *      * Parses a string.     *     * @param    string  $data XML data     * @param    boolean $eof  If set and TRUE, data is the last piece of data sent in this parser     * @throws   XML_Parser_Error     * @return   Pear Error|true   true on success or a PEAR Error     * @see      _parseString()     */    function parseString($data, $eof = false)    {        if (!isset($this->parser) || !is_resource($this->parser)) {            $this->reset();        }                if (!$this->_parseString($data, $eof)) {           $error = &$this->raiseError();           $this->free();           return $error;        }        if ($eof === true) {            $this->free();        }        return true;    }        /**     * XML_Parser::free()     *      * Free the internal resources associated with the parser     *      * @return null     **/    function free()    {        if (isset($this->parser) && is_resource($this->parser)) {            xml_parser_free($this->parser);            unset( $this->parser );        }        if (isset($this->fp) && is_resource($this->fp)) {            fclose($this->fp);        }        unset($this->fp);        return null;    }        /**     * XML_Parser::raiseError()     *      * Throws a XML_Parser_Error     *      * @param string  $msg   the error message     * @param integer $ecode the error message code     * @return XML_Parser_Error      **/    function raiseError($msg = null, $ecode = 0)    {        $msg = !is_null($msg) ? $msg : $this->parser;        $err = &new XML_Parser_Error($msg, $ecode);        return parent::raiseError($err);    }        // }}}    // {{{ funcStartHandler()    function funcStartHandler($xp, $elem, $attribs)    {        $func = 'xmltag_' . $elem;        if (strchr($func, '.')) {            $func = str_replace('.', '_', $func);        }        if (method_exists($this->_handlerObj, $func)) {            call_user_func(array(&$this->_handlerObj, $func), $xp, $elem, $attribs);        } elseif (method_exists($this->_handlerObj, 'xmltag')) {            call_user_func(array(&$this->_handlerObj, 'xmltag'), $xp, $elem, $attribs);        }    }    // }}}    // {{{ funcEndHandler()    function funcEndHandler($xp, $elem)    {        $func = 'xmltag_' . $elem . '_';        if (strchr($func, '.')) {            $func = str_replace('.', '_', $func);        }        if (method_exists($this->_handlerObj, $func)) {            call_user_func(array(&$this->_handlerObj, $func), $xp, $elem);        } elseif (method_exists($this->_handlerObj, 'xmltag_')) {            call_user_func(array(&$this->_handlerObj, 'xmltag_'), $xp, $elem);        }    }    // }}}    // {{{ startHandler()    /**     *     * @abstract     */    function startHandler($xp, $elem, &$attribs)    {        return NULL;    }    // }}}    // {{{ endHandler()    /**     *     * @abstract     */    function endHandler($xp, $elem)    {        return NULL;    }    // }}}me}/** * error class, replaces PEAR_Error * * An instance of this class will be returned * if an error occurs inside XML_Parser. * * There are three advantages over using the standard PEAR_Error: * - All messages will be prefixed * - check for XML_Parser error, using is_a( $error, 'XML_Parser_Error' ) * - messages can be generated from the xml_parser resource * * @package XML_Parser * @access  public * @see     PEAR_Error */class XML_Parser_Error extends PEAR_Error{    // {{{ properties   /**    * prefix for all messages    *    * @var      string    */        var $error_message_prefix = 'XML_Parser: ';    // }}}    // {{{ constructor()   /**    * construct a new error instance    *    * You may either pass a message or an xml_parser resource as first    * parameter. If a resource has been passed, the last error that    * happened will be retrieved and returned.    *    * @access   public    * @param    string|resource     message or parser resource    * @param    integer             error code    * @param    integer             error handling    * @param    integer             error level    */        function XML_Parser_Error($msgorparser = 'unknown error', $code = 0, $mode = PEAR_ERROR_RETURN, $level = E_USER_NOTICE)    {        if (is_resource($msgorparser)) {            $code = xml_get_error_code($msgorparser);            $msgorparser = sprintf('%s at XML input line %d:%d',                                   xml_error_string($code),                                   xml_get_current_line_number($msgorparser),                                   xml_get_current_column_number($msgorparser));        }        $this->PEAR_Error($msgorparser, $code, $mode, $level);    }    // }}}}?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -