Powered By Blogger
Showing posts with label xml. Show all posts
Showing posts with label xml. Show all posts

28 January 2011

อ่าน XML ขนาดใหญ่ ระดับ 1GB ขึ้นไป ด้วย XOM

ลองหาข้อมูลว่า จะ อ่าน XMLขนาดใหญ่ระดับ 1GB ที่ export ออกมาได้ไง
ก็ได้ ว่า Library ชื่อ XOM ของทางฝั่ง Java ทำได้ ไม่ยาก

มีข้อมูลดังนี้ครับ ... แต่ยังไม่ได้ลอง นะครับ

http://www.xom.nu/

http://www.xom.nu/samples.xhtml
http://www.xom.nu/tutorial.xhtml
http://www.xom.nu/xpath.xhtml

ตัวอย่างการใช้ (tutorial )
http://www.xml.com/pub/a/2002/11/27/xom.html
http://javaboutique.internet.com/tutorials/XOM/index3.html

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  เพิ่มเติม