PHP

Home

PHP Tutorial
Knowledge Developer Database Internet Resource
XML และ XHTML
1. XML
2. การทำงานกับ XML ใน PHP
3. XHTML
 
การสร้างโปรแกรมประยุกต์เว็บ
1. Cookie และ Session
2. ระบบการรับรองของ PHP และ MySQL
3. XML และ XHTML
4. PEAR
 
PHP
PHP เบื้องต้น
การสร้างโปรแกรมประยุกต์เว็บ
PHP ระดับสูง
 
Internet
PHP
SSI
HTML
AJAX
 
การสร้างโปรแกรมประยุกต์เว็บ > XML และ XHTML

การทำงานกับ XML ใน PHP

การเข้าถึงและจัดการเอกสาร XML ทั้ง 2 วิธีสนับสนุนโดย PHP

วิธีแรกคือ Simple API for XML ( SAX) นี่เป็นตัวกระจายการเข้าถึงแบบอนุกรมขนาดเล็กสำหรับเอกสาร XML ที่เรียกใช้ฟังก์ชัน เมื่อพบเนื้อหาของประเภทเจาะจง (tag เปิดของ element. Tag ปิดของ element, ข้อมูลข้อความ และอื่นๆ) สิ่งนี้เป็นทิศทางเดียว หมายความว่าการทำงานทั้งเอกสาร XML และบอกสิ่งที่มองเห็น (ดูภาพ 2.3 .2 ) สิ่งนี้มีข้อได้เปรียบจาความเร็วและประสิทธิภาพหน่วยความจำ แต่มีข้อเสียเปรียบจากไม่ทำอะไรยกเว้นแสดง tag กับข้อความ


ภาพ 2.3.2 การกระจายของ SAX

วิธีการที่ 2 เรียกว่า Document Object Model หรือ DOM โดย XML DOM ให้สารสนเทศจากเอกสาร XML ในโครงสร้างตามลำดับชั้นแบบ object-oriented เอกสารที่โหลดไปยัง DOM จะได้รับการจัดรูปโครงสร้างของอ๊อบเจคที่นำเสนอโครงสร้าง การเคลื่อนผ่านเอกสารใช้อ๊อบเจคเหล่านั้น (ดูภาพ 2.3.3) และเป็นวิธีการเข้าถึงข้อมูลสะดวก เพราะข้อมูลได้รับการระบุตามโครงสร้างของเอกสาร XML แต่ DOM มีจุดอ่อนคือ ช้าและใช้หน่วยความจำมาก


ภาพ 2.3.3 การนำเสนอเอกสารของ XML DOM

การใช้ DOM

DOM เป็นเพียงชุดของ class ที่สามารถสร้างตรวจ และจัดการเอกสาร DOM ขณะที่ PHP5 มาพร้อมกับการใช้ DOM ใหม่ที่เปลี่ยนแปลงและปรับปรุงมาก

ตั้งค่า PHP สำหรับ DOM

DOM ใหม่ใช้ได้โดยค่าเริ่มต้นใน PHP5 ผู้ใช้คอมไพล์ PHP ด้วยตัวเองโดยไม่มีคำสั่งเพิ่มตามความต้องการ ไม่มีตัวเลือกคอนฟิกที่ต้องการใน php.ini สำหรับส่วนขยายนี้

เริ่มต้นในคำสั่ง

การใช้ DOM ใน PHP5 เป็นจุดแข็งใน class ของอ๊อบเจค สิ่งสำคัญคือ DOMDocument class เป็น class ที่ใช้โหลดและบันทึกเอกสาร เข้าถึง element ในเอกสาร และค้นหาเนื้อหาภายในเอกสาร การสร้าง DOMDocument ทำได้ง่าย

$dom = new DOMDocument();

หลังจากนั้นให้โหลดเนื้อหา XML ที่ต้องการกระจาย โดยสามารถทั้งให้ชื่อไฟล์ที่โหลดด้วยฟังก์ชัน load หรือ เป็นเพียงข้อความที่เก็บเนื้อหา XML ผ่านฟังก์ชัน loadXML

$in_file = "order.xml";
$result = $this->dom->load($in_file);

if ($result === FALSE)
    throw new FailLoadOrderException();

DomDocument class เก็บหลายเมธอดที่ใช้สร้างเอกสาร XML รวมถึงการสร้าง element, attribute และข้อความเนื้อหา รวมถึงวิธีการค้นหาภายในเอกสารและตรวจความถูกต้องด้วย DTD และ XSD

คุณสมบัติแรกที่จะทำงานด้วยคือ document element ที่ส่งออก node รากของลำดับชั้น element ในเอกสาร

ลำดับชั้น element

เอกสาร XML ได้รับการจัดในรูปแบบตามลำดับชั้นด้วย node เนื้อหาทั้งหมดจาก 1 document element หรือ node จาก โดย node รากนี้คือเข้าถึงด้วยการคิวรี่ คุณสมบัติ document element

$rootNode = $dom->documentElement

การทำงานของ DOM ต้องปรับตามความต้องการในข้อกำหนด XML ที่ให้ DOM รักษาเนื้อหาข้อความทั้งหมดในเอกสาร XML รวมถึง whitespace ระหว่าง node ให้ตั้งค่าคุณสมบัติ preserveWhiteSpace เป็น TRUE

ถ้าไม่สนใจ whitespace และส่วนอื่น เช่น บรรทัดใหม่ ช่องว่างและแท็บ กำหนดคุณสมบัติ preserveWhiteSpace ตั้งค่าเป็น FALSE ก่อนการโหลดเอกสาร การเปลี่ยนในตัวแปรสมาชิกนี้ไม่มีผลกับเอกสารต้นฉบับ

Node และ Element

node และ element ทั้งหมด inherit จาก class ฐานเดียวกันคือ DOMNode มีมาตรฐานในการค้นกา node สำหรับสารสนเทศและทำงานกับลำดับชั้นของเอกสาร

ตัวอย่างคำสั่งต่อไปถึงเอกสาร XML และแสดงบางคุณสมบัติที่ต้องการ

<?php

$xmldoc = <<<XMLDOC

<?xml version="1.0" encoding="utf-8"?>
<pt:printers xmlns:pt='http://localhost/phptrain/chapter16'>

<pt:printer>

<pt:Brand>Canon</pt:Brand>
<pt:Model>i550</pt:Model>
<pt:Price>7500.00</pt:Price>

</pt:printer>

</pt:printers>

XMLDOC;

$dom = new DOMDocument();

//$dom->preserveWhiteSpace = FALSE;
// โหลดจากไฟล์ xml_printer.xml ในไดเรคทอรีเดียวกัน
$result = $dom->load("xml_printer.xml");

// ถ้าโหลดข้อความ XMLDOC
// $result = $dom->loadXML($xmldoc);

if ($result == FALSE)
    die(' ไม่สามารถโหลดข้อความ XML');

$node = $dom->documentElement;
echo $node->nodeName . "<br/>\n";
echo $node->localName . "<br/>\n";
echo $node->tagName . "<br/>\n";
echo $node->prefix . "<br/>\n";
echo $node->namespaceURI . "<br/>\n";
echo "<br/><br/>\n";

?>

ผลลัพธ์ของสคริปต์นี้คือ
pt:printers
printers
pt:printers
pt
http://localhost/phptrain/chapter16

Attribute

การเข้าถึง attribute มี 2 ทางเลือก วิธีคือการใช้เมธอด hasAttribute และ getAttribute

<?php

if ($element->hasAttribute('name'))
    echo " ชื่อ :". $element->getAttribute('name');
else
    echo "element นี้ไม่มีคุณลักษณะ name";

?>

อีกวิธีใช้ attributes collection บน DOMNode class ที่ให้ดึง DOMAttr class ในการนำเสนอคุณลักษณะเหล่านี้

<?php

$attrs = $element->attributes;
if ($attr !== NULL)
{
  foreach ($attrs as $attr)
  {
    if ($attr->name == 'name')
      echo " ชื่อ :". $attr->value;
    }
}
else
  echo "element นี้ไม่มีคุณลักษณะ name";

?>

ถึงแม้ว่าไม่สะดวกเท่ากับเมธอด getAtlributes บน DOMElement class แต่วิธีนี้ทำให้มองเห็นคุณลักษณะ และค่าทั้งหมดเมื่อไม่แน่ใจว่าคุณลักษณะใดมีอยู่สำหรับ element ที่ให้

 


  

สงวนลิขสิทธิ์ (C) widebase / Julaphak