读取xml的简单分页处理

这个东西功能很简单,没有什么技术含量。只是记录一下。

 xml 的数据获取后,可以通过一个简单分页处理来完成简单分页效果。

1.利用求余和除法的方法判断页数


  这个是一个比较常见的做法,也是一种办法。在这里,不对这种分页处理要达到什么最优化的效果进行讨论,这里只是探讨一种办法。对一些数据量不大的做法,可以尝试一下这些。然而对于过大的数据量,则需要其他办法处理。我对数据库并不熟悉,甚至可以说早已经遗忘了很多。不过,利用现在的资源处理一下这些还算可以。

  假设,xml 有50条的信息,我们每一页只是显示10条,则50/10=5;计算出5页。

  假设,xml 有51条信息,我们需要进行分页,每一页显示10条,则51/10=5.....1(余1) 则我们需要分页数为5+1=6页。

 可以假设推导,当除尽的时候,容易计算出页数,当不能计算出,我们则通过求余的方式来判断是否求可以整除。 (页数%2==0).

 下面就是一个思路。

    if(总页数%2==0)

   {

        分页数=总页数/每一页的条数

   }

   else

 {

     分页数=总页数/每一页的条数+1;

 }

有了这个办法之后,我们写一个简单类实现这个功能。

view plaincopy to clipboardprint?


 

代码
package com.web   
{   
    
//分页类   
    public class Page   
    {   
        
private var max:int;   
        
private var pagenum:int;   
        
private var currentPages:int;   
        
public function Page()   
        {   
  
        }          
        
//设置分页项数   
        public function set MaxRow(max:int):void  
        {   
            
this.max=max;   
        }   
        
//获取分页项数   
        public function get MaxRow():int  
        {   
            
return max;   
        }   
           
        
public function set currentPage(value:int):void  
        {   
               
            
this.currentPages=value;   
        }   
           
        
public function get currentPage():int  
        {   
            
return currentPages;   
               
        }   
           
           
        
//获取总的分页数,利用求余的方式判断是不是整页   
        public function getPageNumber(total:int):int  
        {   
            
if (total%MaxRow==0)   
            {   
                pagenum
=total/MaxRow;   
            } 
else  
            {   
                pagenum
=int(total/MaxRow)+1;   
            }   
            
return pagenum;   
        }   
           
        
public function get TotalPage():int  
        {   
            
return pagenum;   
        }   
           
        
//显示页码   
        public function getPage():String   
        {   
            var str:String
=(currentPage+1)+"/"+TotalPage;    
            
return str;   
        }   
           
           
           
    }   
}  

 

2.接下来,我们还需要对其进行分页处理。

3扩展文本,为了实现了一个提示的作用,因此为文本扩展一个字符串

 

package com.web
{

 import flash.text.
*;
    
//扩展文本
 public class TextFieldEx extends TextField
 {
  
public var toopTip:String;
  
public function TextFieldEx()
  {

  }
 }


 

 

4 总的文档类。

 

代码

package    
{   
  
    import flash.display.MovieClip;   
    import flash.display.Sprite;   
    import flash.events.
*;   
    import flash.text.
*;   
  
    import flash.net.URLLoader;   
    import flash.net.URLRequest;   
    import flash.net.navigateToURL;   
    import com.web.Page;   
    import com.web.TextFieldEx;   
    
public class Main extends MovieClip   
    {   
        
private var list:Array=new Array();   
        
private var url:Array=new Array();//超链接数据   
        private var description:Array=new Array();//新闻的简短描述   
        private var count:int=0;//点击次数的计算器   
        private var temp:int=0;   
        
private var total:int;   
        
private var contain:Sprite=new Sprite();   
        
private var page:Page=new Page();//分页类   
        private var toolcontain:Sprite=new Sprite();   
        
public function Main()   
        {   
            init();   
        }   
        
private function init():void  
        {   
            page.MaxRow
=10;//设置最大的页数   
              var loader:URLLoader=new URLLoader();   
            loader.addEventListener(Event.COMPLETE,completeHandler);   
            loader.addEventListener(IOErrorEvent.IO_ERROR,ErrorHandler);   
            loader.load(
new URLRequest("http://www.people.com.cn/rss/politics.xml"));   
            Btn_Preview.addEventListener(MouseEvent.CLICK,onPreview);   
            Btn_Next.addEventListener(MouseEvent.CLICK,onNext);   
            Btn_Preview.buttonMode 
=true;   
            Btn_Next.buttonMode 
=true;   
            addChild(contain);   
            addChild(toolcontain);   
            page.currentPage
=count;   
        }   
        
private function onPreview(event:MouseEvent):void  
        {   
            
if (count!=0)   
            {   
                count
--;   
                page.currentPage
=count;   
                showTitle();   
            }   
        }   
        
private function onNext(event:MouseEvent):void  
        {   
            
if (count<total-1)   
            {   
                count
++;   
                page.currentPage
=count;   
                showTitle();   
            }   
        }   
        
private function completeHandler(event:Event):void  
        {   
            var xml:XML
=XML(event.target.data);   
            read(xml);   
            total
=page.getPageNumber(list.length);//进行分页处理   
            showTitle();//显示新闻标题   
        }   
           
        
private function  ErrorHandler(event:IOErrorEvent):void  
        {   
            
throw new Error("路径或者xml错误");   
        }   
  
        
//读取远程的xml数据   
        private function read(xml:XML):void  
        {   
            
for each (var node:XML in xml..item)   
            {   
                list.push(node.title);   
                url.push(node.link);   
                description.push(node.description);   
            }   
        }   
  
        
//输出新闻标题   
        private function showTitle():void  
        {   
            clearAll(contain);   
            var k:
int=0;   
            temp
=page.MaxRow*(count+1)>list.length ? list.length :page.MaxRow*(count+1);   
            
for (var i:int=page.MaxRow*count; i<temp; i++)   
            {   
                var txt:TextFieldEx
=new TextFieldEx();   
                contain.addChild(txt);   
                txt.x
=30;   
                txt.width
=500;   
                txt.height
=23;   
                txt.y
=txt.height*k+10;   
                txt.border
=true;   
                txt.toopTip
=description[i];   
                txt.htmlText
="<a href=""+url[i]+"" mce_href=""+url[i]+"">"+list[i]+"</a>";//进行超链接   
                txt.addEventListener(MouseEvent.ROLL_OVER,onRoll);   
                txt.addEventListener(MouseEvent.ROLL_OUT,onRoll);   
                txt.selectable
=false;   
                txt.addEventListener(TextEvent.LINK,onLink);   
                k
++;   
            }   
            pageMsg.text
=page.getPage();;   
        }   
          
        
//进行超链接   
        private function onLink(event:TextEvent):void  
        {              
            navigateToURL(
new URLRequest(event.text));   
            
//navigateToURL(new URLRequest(event.currentTarget.URL));   
        }   
           
        
private function onRoll(event:MouseEvent):void  
        {   
            
switch(event.type)   
            {   
                
case MouseEvent.ROLL_OVER:   
                  
event.currentTarget.textColor=0xff0000;   
                  ShowtoolTip( 
event.currentTarget.toopTip);   
                
break;   
                   
                
case MouseEvent.ROLL_OUT:   
                 
event.currentTarget.textColor=0x000000;   
                 clearAll(toolcontain);   
                
break;   
               
            }   
        }   
           
        
//进行提示   
        private function ShowtoolTip(msg:String):void  
        {   
            clearAll(toolcontain);   
            var tool:TextField
=new TextField();   
            toolcontain.addChild(tool);   
            tool.text
=msg;   
            tool.wordWrap
=true;   
            tool.width
=300;   
            tool.background
=true;   
            tool.backgroundColor
=0xCCCCCC;   
            tool.autoSize
=TextFieldAutoSize.LEFT;   
            tool.x
=mouseX+20;   
            tool.y
=mouseY;     
        }   
           
  
        
//利用求余办法来求出分页的总页数   
        private function clearAll(contain:Sprite):void  
        {   
            
while (contain.numChildren>0)   
            {   
                contain.removeChildAt(
0);   
            }   
        }   
    }   
}  

 

 

 

 获取XML数据源

现在开始,我们看看是怎样获取到xml的资源?这次我们使用的xml 并不是在本地里面进行,而是通过外部网络的rss提供的xml 数据进行解析 
  

 

代码
   var loader:URLLoader=new URLLoader();
   loader.addEventListener(Event.COMPLETE,completeHandler);
   loader.addEventListener(IOErrorEvent.IO_ERROR,ErrorHandler);
   loader.load(
new URLRequest("http://www.people.com.cn/rss/politics.xml")); 

 

读取完成xml后,我们对一些数据进行保存,使用数组进行对xml 的标题,连接地址。描述进行处理。

显示数据一种处理方法

保存了这些后,现在开始我们就通过交互性的操作让xml 看起来就像分页一样。

每一次,我们读取的数据是限定的,假设我设置每一页最多显示的数据为10,那么通过计算出分页码,每次通过循环的显示出数组里面的内容

 0---10

11---21

22---32

33---43

这样的方式进行处理;

关键一个地方处理输出的条件。开始--限制输出的条数判断

  temp=page.MaxRow*(count+1)>list.length ? list.length :page.MaxRow*(count+1);
   for (var i:int=page.MaxRow*count; i<temp; i++)

 

代码

private function showTitle():void  
        {   
            clearAll(contain);   
            var k:
int=0;   
            temp
=page.MaxRow*(count+1)>list.length ? list.length :page.MaxRow*(count+1);   
            
for (var i:int=page.MaxRow*count; i<temp; i++)   
            {   
                var txt:TextFieldEx
=new TextFieldEx();   
                contain.addChild(txt);   
                txt.x
=30;   
                txt.width
=500;   
                txt.height
=23;   
                txt.y
=txt.height*k+10;   
                txt.border
=true;   
                txt.toopTip
=description[i];   
                txt.htmlText
="<a href=""+url[i]+"" mce_href=""+url[i]+"">"+list[i]+"</a>";//进行超链接   
                txt.addEventListener(MouseEvent.ROLL_OVER,onRoll);   
                txt.addEventListener(MouseEvent.ROLL_OUT,onRoll);   
                txt.selectable
=false;   
                txt.addEventListener(TextEvent.LINK,onLink);   
                k
++;   
            }   
            pageMsg.text
=page.getPage();;   
        }  

 

 

 鼠标交互性:翻页

 弄好了这个,我们讨论鼠标的交互性,当我们点击了按钮后,我们希望进行分页的效果。在这里笔者想到一个点击数的计算办法

通过人的点击数来计算出显示出那一页。

 

代码

private function onPreview(event:MouseEvent):void  
        {   
            
if (count!=0)   
            {   
                count
--;   
                page.currentPage
=count;   
                showTitle();   
            }   
        }   
        
private function onNext(event:MouseEvent):void  
        {   
            
if (count<total-1)   
            {   
                count
++;   
                page.currentPage
=count;   
                showTitle();   
            }   
        }  

 

 

count 变量为 鼠标点击计数器,初始化0;当点击了那么就会变成1.

点击是数需要进行一定的限制,不能超过总的分页数total(为分页后的数)

显示页码

通过鼠标交互,就能显示出不同的页数了。最后就是显示页码了

 

//显示页码
  public function getPage():String
  {
   var str:String
=(currentPage+1)+"/"+TotalPage; 
   
return str;
  } 

 

 

 不足地方依旧很大,只能算一个简单demo 效果了。

 

posted on 2009-12-21 14:00  夏天的树人  阅读(2002)  评论(1编辑  收藏  举报