首页 > 编程技术 > php

用PHP和mxml 实现FLASH 曲线图

发布时间:2016-11-25 16:55



MXML是一个可以让你在Adobe Flex中布局用户界面组件的一种XML语言。你也可以使用MXML声明来定义程序中的非可视化组件。安装好FLEX Development 后,你就可以轻松的结合PHP完成一个FLASH曲线图。
先从PHP入手:
FLEX 和PHP的交互最常用的就是
和XML的交互,就是用PHP生成XML,然后用FLEX去读取并且显示。
我们以XML的形式先写一个帐目详单的数据。
 
代码:
header("Content-Type: text/xml");
$arr = array(
                            array('day'=>'01','sum'=>'153.1'),
                            array('day'=>'02','sum'=>'882.86'),
                            array('day'=>'03','sum'=>'456.9'),
                            array('day'=>'04','sum'=>'717.7'),
                            array('day'=>'05','sum'=>'255.1'),
                            array('day'=>'06','sum'=>'533.1')
);
$xml_return  .= "<bills>";
foreach ( $arr as $use){
       $xml_return .="<bill><sum>{$use['sum']}</sum><name>{$use['day']}</name></bill> ";
}
$xml_return.= "</bills>";
echo $xml_return;
显示6个月的消费记录,$arr也可以是从数据库读出来的数据,这里只是作为一个例子,所以直接给一个数组赋值。
- <bills>
- <bill>
<sum>153.1</sum>
<name>01</name>
</bill>

- <bill>
<sum>882.86</sum>
<name>02</name>
</bill>

- <bill>
<sum>456.9</sum>
<name>03</name>
</bill>

- <bill>
<sum>717.7</sum>
<name>04</name>
</bill>

- <bill>
<sum>255.1</sum>
<name>05</name>
</bill>

- <bill>
<sum>533.1</sum>
<name>06</name>
</bill>

</bills>
 

Php部分就完成了 接下来是写MXML:
 
代码:
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"  creationComplete="getaccount()">
   <mx:HTTPService id="listRequest" url="" useProxy="false" method="POST">
   <mx:request xmlns=""> </mx:request>
   </mx:HTTPService>
  
   <mx:Script><![CDATA[
    import mx.rpc.events.ResultEvent;//引用ResultEvent类
    public function getaccount():void{
  listRequest.url='http://localhost/arr.php';
     listRequest.send();
}
  ]]></mx:Script>
   <mx:LineChart showDataTips="true" clipContent="false" x="126" y="10" id="tongjitu"  dataProvider="{listRequest.lastResult.bills.bill}" width="678">
   <mx:horizontalAxis>     
    <mx:CategoryAxis dataProvider="{listRequest.lastResult.bills.bill}"  categoryField="name" title="(日)" />
   </mx:horizontalAxis> 
      <mx:series>
         <mx:LineSeries displayName="每日消费" yField="sum" xField="name"/>
    </mx:series>
   </mx:LineChart>
</mx:Application>
逐一解释一下
 
代码:
Application //MXML应用程序开头

 
代码:
creationComplete="getaccount()" //代表页面加载完成后 执行 getaccount函数

 
代码:
〈mx:HTTPService id="listRequest" url="" useProxy="false" method="POST"〉
   〈mx:request xmlns=""〉 〈/mx:request〉
   〈/mx:HTTPService〉
//则是一个HTTP的请求,发送POST到一个PHP文件 去获取数据

 
代码:
mx:Script //MXML里面的脚本 都用 <mx:Script>包含进去

下面分析下getaccount函数:
 
代码:
public function getaccount():void{
       listRequest.url='http://localhost/arr.php';
        listRequest.send();
    }
//列出了 HTTPService 请求地址是  http://localhost/arr.php
//你同样也可以写成相对路径 比如 listRequest.url='./arr.php';

 
代码:
mx:LineChart  //是一个 曲线 组件,我们可以直接拿来使用

 
代码:
dataProvider :数据源:listRequest.lastResult.bills.bill
       bills.bill 是XML里面的标签

 
代码:
  mx:LineSeries displayName="每日消费" yField="sum" xField="name" 
//则定义了 横纵坐标的值。   
//Sum  name  就是XML里面的数据的标签

php读了xml很方便的,我们下面用dom与php自带的xml_parser来实例吧,我们先看看wk.xml 文件, 其实这里是blogbus的rss文件哦,

<?xml version="1.0" encoding="gb2312"?>
<rss version="2.0">
 <channel>
  <title>mikeowen</title>
  <link>http://mikeowen.blogbus.com</link>
  <description><![CDATA[Design]]></description>
  <generator> by blogbus.com </generator>
  <lastBuildDate>Tue, 30 Jan 2007 13:46:52 +0800</lastBuildDate>
  <image>
         <url>http://public.blogbus.com/images/head.gif</url>
         <title>mikeowen</title>
         <link>http://mikeowen.blogbus.com</link>
        </image>
<item>
   <title>vanke</title>
   <description>tff</description>
   <link>http://mikeowen.blogbus.com/logs/28560579.html</link>
   <author>mikeowen</author>
   <pubDate>Fri, 05 Sep 2008 12:41:22 +0800</pubDate>
  </item>
  <item>
   <title>something3</title>
   <description>eee</description>
   <link>http://mikeowen.blogbus.com/logs/23972142.html</link>
   <author>mikeowen</author>
   <pubDate>Wed, 02 Jul 2008 12:26:40 +0800</pubDate>
  </item>
 </channel>
</rss>

这是我一个同事的博客rss文件我取下来作实例了吧.下面我们来看看解析xml 的方法用dom来做,

<?php
  $doc = new DOMDocument();
  $doc->load( 'wk.xml' );
 
  $books = $doc->getElementsByTagName( "item" );
  foreach( $books as $book )
  {
  $authors = $book->getElementsByTagName( "title" );
  $author = $authors->item(0)->nodeValue;
 
  $publishers = $book->getElementsByTagName( "link" );
  $publisher = $publishers->item(0)->nodeValue;
 
  $titles = $book->getElementsByTagName( "pubDate" );
  $title = $titles->item(0)->nodeValue;
 
  echo "$title - $author - $publishern";
  }


?>
简单吧,直接读取节点然后再取当前第一个节点的值就行了.好了下面我们再看第种方法用php  自然的.

<?php 
  $g_books = array();
  $g_elem = null;
 
  function startElement( $parser, $name, $attrs )
  {
  global $g_books, $g_elem;
  if ( $name == 'item' ) $g_books []= array();
  $g_elem = $name;
  }
 
  function endElement( $parser, $name )
  {
  global $g_elem;
  $g_elem = null;
  }
 
  function textData( $parser, $text )
  {
  global $g_books, $g_elem;
  if ( $g_elem == 'link' ||
  $g_elem == 'pubDate' ||
  $g_elem == 'title' )
  {
  $g_books[ count( $g_books ) - 1 ][ $g_elem ] = $text;
  }
  }
 
  $parser = xml_parser_create();
 
  xml_set_element_handler( $parser, "startElement", "endElement" );
 
  xml_set_character_data_handler( $parser, "textData" );
 
  $f = fopen( 'wk.xml', 'r' ); 
 
  while( $data = fread( $f, 4096 ) )
  {
  xml_parse( $parser, $data );
  }
 
  xml_parser_free( $parser );
 
  foreach( $g_books as $book )
  {
  echo $book['title']." - ".$book['link']." - ";
  echo $book['pubDate']."n";
  }
  ?>

这种代码多一点,单效率要比上面那个高很多的.


<?php
$doc = new DOMDocument();
$doc->load( 'books.xml' );

$books = $doc->getElementsByTagName( "book" );
foreach( $books as $book )
{
$authors = $book->getElementsByTagName( "author" );
$author = $authors->item(0)->nodeValue;

$publishers = $book->getElementsByTagName( "publisher" );
$publisher = $publishers->item(0)->nodeValue;

$titles = $book->getElementsByTagName( "title" );
$title = $titles->item(0)->nodeValue;

echo "$title - $author - $publishern";
}
?>

读取xml文件,php 读取html文件,如何读取xml文件

$obj = new JZH_xml("<STRING>asdfasdf</STRING>");
$obj->setChar('gb2312');
$obj->getElementByTagname('string',0)->value;
$obj->getstring(0)->value;
...
/*
       轻便的xml文档操作
       setChar 编码转换
       parse 解析xml文档
       parse_file 从文件解析xml文档
       getElementByTagname 获得tag对象
       get<tag> 获得tag对象
*/
class JZH_xml{
       var $index;
       var $vals;
       var $in='utf-8';
       var $out='utf-8';
       var $xmlobj;
       function JZH_xml($data=false,$in=false,$out=false){
              $this->xmlobj = xml_parser_create();
              if($data){
                     xml_parse_into_struct($this->xmlobj, $data, $this->vals, $this->index);
                     xml_parser_free($this->xmlobj);
              }
       }
       function setChar($out=false,$in=false){
              if($in)$this->in=$in;
              if($out)$this->out=$out;
              array_walk_recursive($this->vals,array($this,'iconv'));
       }
       function iconv(&$value, $key){
              $value=iconv($this->in,$this->out,$value);
       }
       function parse($data){
              
              xml_parse_into_struct($this->xmlobj, $data, $this->vals, $this->index);
              xml_parser_free($this->xmlobj);
       }
       function parse_file($file){
              $data = file_get_contents($file);
              $this->parse($data);
       }
       function getElementByTagname($tag,$index){
              $tag = strtoupper($tag);
              if(!isset($this->index[$tag][$index]))return false;
              $index = $this->index[$tag][$index];
              return (object)$this->vals[$index];
       }
       function __call($name,$arguments){
              if(($tag=str_replace('GET','',strtoupper($name)))==strtoupper($name))return false;
              return $this->getElementByTagname($tag,$arguments[0]);
       }
}

 代码如下 复制代码

<?php
  $books = array();
  $books [] = array(
  'title' => 'PHP Hacks',
  'author' => 'Jack Herrington',
  'publisher' => "O'Reilly"
  );
  $books [] = array(
  'title' => 'Podcasting Hacks',
  'author' => 'Jack Herrington',
  'publisher' => "O'Reilly"
  );
 
  $doc = new DOMDocument();
  $doc->formatOutput = true;
 
  $r = $doc->createElement( "books" );
  $doc->appendChild( $r );
 
  foreach( $books as $book )
  {
  $b = $doc->createElement( "book" );
 
  $author = $doc->createElement( "author" );
  $author->appendChild(
  $doc->createTextNode( $book['author'] )
  );
  $b->appendChild( $author );
 
  $title = $doc->createElement( "title" );
  $title->appendChild(
  $doc->createTextNode( $book['title'] )
  );
  $b->appendChild( $title );
 
  $publisher = $doc->createElement( "publisher" );
  $publisher->appendChild(
  $doc->createTextNode( $book['publisher'] )
  );
  $b->appendChild( $publisher );
 
  $r->appendChild( $b );
  }
 
  echo $doc->saveXML();
  ?>

标签:[!--infotagslink--]

您可能感兴趣的文章: