• <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-7-14 19:53 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 8次 | 進入軟件測試論壇討論

    領測軟件測試網 <?
    /*
        (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/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品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>