Powered By Blogger

29 October 2010

PHP - Connect 2 System With XML DOM

เมื่อมี 2 ระบบ 
บางครั้งเราไม่อยาก จะให้ ระบบ A เข้าถึง ฐานข้อมูลในระบบ B
แต่ก็ อยากจะเชื่อมต่อข้อมูลได้ 


เราอาจเลือกการเชื่อมต่อด้วย XML โดย StaticFile 
แต่การสร้าง Static XML file ต้องอาศัยเลือก ทำ Export ตามช่วงเวลา 
หรือ สร้าง Temp File 


หากต้องการ สร้าง XML on the fly  ,  ( http://en.wikipedia.org/wiki/On_the_fly )  
สามารถ ใช้ วิธีการ สร้างตัวเชื่อมต่อระบบ ด้วย PHP ได้ 
(ระบบหลักอาจเป็น Database / ภาษา อื่นๆได้ ) 


ดังนี้ 


1 จุด Export Data เป็น XML 
ws_user.php  สำหรับ  Export  รายชื่อ user 
---------------------------------------------------------------------

<?php
header('Content-Type: text/xml');
header('Content-Disposition: attachment; filename="file_user.xml"');
header('Content-Transfer-Encoding: binary');

$db= mysql_connect("127.0.0.1", "root","password");
mysql_select_db("km", $db);
$rs = mysql_query("select * from  table_user  " , $db );

echo "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" ;
echo "<root>";
while($r = mysql_fetch_object($rs )){
echo "<user>";
 etag ("id",$r->id );
 etag ("username" , $r->username );
 etag ("password" , $r->password );
echo "</user>";              
}
echo "</root>";

function etag($tagname, $data ){
                echo "\n<$tagname>$data</$tagname>";
}
?>

จะได้ XML  
ดังนี้ 
<?xml version="1.0" encoding="UTF-8" ?>
  - <root>
- <user>
    <id>1</id>
  <username>admin</username>
  <password>aa</password>
  </user>
- <user>
  <id>2</id>
  <username>prakarn</username>
  <password>don't_use_this_for_next_delete</password>
  </user>
  </root>

ข---------------------------------------------------------------------

   ส่วนระบบ  ที่ดึงข้อมูลไปใช้ 
  จะมี code php ดังนี้ 


  file  get_xuser.php 
ข---------------------------------------------------------------------
<?php 
// phpinfo();

//$dom = new DOMDocument('1.0' , 'UTF-8');

/
$query = "http://127.0.0.1/xml/use/ws_user.php" ;
echo "$query";

$xml = file_get_contents($query);
echo "<BR>load xml";
echo "<BR>xml=" ;
echo "<pre>";
echo htmlentities($xml);
echo "</pre>";

$dom = new DOMDocument('1.0' , 'UTF-8');
if($dom->loadXML($xml) == false){
die('Paarsing failed');
}else{
echo "<BR>load  xml to dom ok";
}

echo "<BR>dom=" ;
print_r($dom );


$phpobject = simplexml_load_string($xml) or die("can not load simple xml ");
echo "<pre>";
print_r($phpobject);
echo "</pre>";



?>

  จาก ตัวอย่างเป็น  2 วิธีในการดึงข้อมูล  ถ้า PHP 4 ต้อง ใช้ DOM
  แต่ PHP 5 จะมี SimpleXML Module แปลงมาเป็น โครงสร้าง PHP Object เลย  
   ซึ่งจะง่ายกว่า วิธีนี้ แนะนำใน WebSite ของ Yahoo!  Developer สำหรับ PHP 5 






จะได้ ผลลัพธ์ ดังด้านล่าง  
http://127.0.0.1/xml/use/ws_user.php
load xml
xml=
<?xml version="1.0" encoding="UTF-8" ?><root><user>
<id>1</id>
<username>user1</username>
<password>pass1</password></user><user>
<id>2</id>
<username>user1</username>
<password>pass2 Test</password></user></root>

load xml to dom ok
dom=DOMDocument Object ( )

SimpleXMLElement Object
(
    [user] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [id] => 1
                    [username] => user1
                    [password] => password1
                )

            [1] => SimpleXMLElement Object
                (
                    [id] => 2
                    [username] => user2
                    [password] => password2
                )

        )

)
ซึ่งในโปรแกรม นี้จะแสดง วิธีโหลด เข้ามาทั้งแบบ DOM และ แบบ SimpleXML
แต่จะพบว่า SimpleXML จะได้โครงสร้าง เป็น PHP เลยซึ่งน่าจะง่าย ในการ parse มากกว่า  ส่วนวิธีการ parse หรือวนลูป แล้วอ่าน  element/attribute ต่างๆนั้น  อาจศึกษาใน link reference  และ document php  เพิ่มเติม


No comments: