บางครั้งเราไม่อยาก จะให้ ระบบ 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" ?>
<id>1</id>
<username>admin</username>
<password>aa</password>
</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=
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:
Post a Comment