วันศุกร์ที่ 21 สิงหาคม พ.ศ. 2552

xml parser DOM

วันก่อนได้มีโอกาส หาวิธีที่จะดึงข้อมูลในไฟล์xml ออกมาโดยใช้php เมื่อลองดูปรากฏว่าใช่ง่ายดี แต่ต้องเข้าใจหลักการมันก่อน
DOM(Dociment Object Model) วิธีนี้จะโหลดไฟล์xml เข้ามาในหน่วยความจำ แล้วจะมองข้อมูลเป็นลักษณธของtree ซึ่งประกอบด้วยNodeต่างๆ การเข้าถึงข้อมูลจะเข้าไปตามกิ่งต่างๆ ทีละกิ่งหรือจะเข้าโดยอ้างชื่อของกิ่งได้เลยแบบ Random access การใช้งานทำได้โดยใช้API ของ DOM

ตัวอย่างการใช้งานDOMdocument
มีไฟล์เอกสารsubjects.xml


< ?xml version="1.0" encoding="UTF-8" ?>
<>
<>Elective subject< /title>
< type="Major">
<>Computer Graphic< /subject>
<>Decision support system< /subject>
<>Voice over IP< /subject>
< /data>
< type="Free">
<>web service< /subject>
<>database programming< /subject>
<>supplies chain management< /subject>
< /data>
< /menu>

ตัวอย่างcode php
$dom = new DOMDocument("1.0", "UTF-8");
$dom->load("./subject.xml");
$title = $dom->getElementsByTagName("title")->item(0)->textContent;
echo $title."\n";
$data = $dom->getElementsByTagName("data");
foreach($data as $theData)
{
echo "--------------------------------------------------------";
echo "\n";
echo $theData->attributes->item(0)->textContent;
echo "\n";
echo "--------------------------------------------------------";
echo "\n";
$Subject = $theData->getElementsByTagName("subject");
foreach($Subject as $theSubject)
{
echo $theSubject->textContent;
echo "\n";
}
}
?>

เริ่มจากโหลด ไฟล์xmlเข้าไปในDOM แล้วไฟล์xmlจะถูกเก็บไว้ในmemory ถ้าเอกสารใหญ่ก็จะโหลดนานตามขนาดไฟล์
$title = $dom->getElementsByTagName("title")->item(0)->textContent;
echo $title."\n";
method getElementsByTagName() เพื่อ get DOMNodeList ซึ่งจะได้ list ของ node โดยเราสามารถอ้างถึงแต่ละ node ได้โดยใช้ item() แล้ว
attributes คือการอ้างถึงattributeของ nodeนั้น
textContent คือการอ้างถึงdata member ของnodeนั้น
ข้างบนเป็นตัวอย่างง่ายๆ ของการใช้DOM Documentให้การดึงข้อมูลจากไฟล์xml
มีประโยชน์มากสำหรับการพัฒนาเวป ที่ดึงข้อมูลโดยใช้api หรือfeed เป็นอย่างยิ่ง

อ้างอิง : http://en.wikipedia.org/wiki/Document_Object_Model

ไม่มีความคิดเห็น:

แสดงความคิดเห็น