• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 一個操作xml的類

    發表于:2007-07-14來源:作者:點擊數: 標簽:
    ? /* (c) 2000 Hans Anderson Corporation.All Rights Reserved. You are free to use and modify this class under the same guidelines found in the PHP License. ----------- bugs/me: http://www.hansanderson.com/php/ me@hansanderson.com showstv@16
    <?
    /*
        (c) 2000 Hans Anderson Corporation.  All Rights Reserved.
        You are free to use and modify this class under the same
        guidelines found in the PHP License.

        -----------

        bugs/me:
        http://www.hansanderson.com/php/
        me@hansanderson.com
        showstv@163.com

        -----------

        Version 1.0

            - 1.0 is the first actual release of the class.  It's  
              finally what I was hoping it would be, though there
              are likely to still be some bugs in it.  This is
              a much changed version, and if you have downloaded
              a previous version, this WON'T work with your existing
              scripts!  You'll need to make some SIMPLE changes.

            - .92 fixed bug that didn't include tag attributes

              (to use attributes, add _attributes[array_index]
               to the end of the tag in question:
                $xml_html_head_body_img would become
                $xml_html_head_body_img_attributes[0],  
               for example)

               -- Thanks to Nick Winfield <nick@wirestation.co.uk>
                  for reporting this bug.

            - .91 No Longer requires PHP4!

            - .91 now all elements are array.  Using objects has
              been discontinued.
    */

    class xml_container{

        function store($k,$v) {
            $this->{$k}[] = $v;
        }
    }


    /* parses the information */
    /*********************************
    *    類定義開始
    *
    *********************************/
    class xml{
        
        // initialize some variables
        var $current_tag=array();
        var $xml_parser;
        var $Version = 1.0;
        var $tagtracker = array();

        /* 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;
        } // end function endElement


        /* 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;
        }


        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

    ?>




    操作方法:

    require('class.xml.php');
    $file = "data.xml";
    $data = implode("",file($file)) or die("could not open XML input file");
    $obj = new xml($data,"xml");


    print $xml["hans"][0]->num_results[0];
    for($i=0;$i<sizeof($xml["hans"]);$i++) {
    print $xml["hans"][$i]->tag[0] . " ";
    }

    To print url attributes (if they exist):

    print $xml["hans"][0]->attributes[0]["size"];

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>