แสดงบทความที่มีป้ายกำกับ transform แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ transform แสดงบทความทั้งหมด

วันอาทิตย์ที่ 15 กุมภาพันธ์ พ.ศ. 2552

การแปลงไฟล์ XML ให้เป็น HTML โดยใ้ช้ XSL และ PHP

บ่อยครั้งที่ข้อมูล XML ดูยากเพราะเป็นตัวอักขระล้วน ดังนั้นผู้พัฒนาโปรแกรมจึงต้องการนำเสนอข้อมูลที่ดูง่ายกว่าเช่นในรูปแบบ HTML เราสามารถเขียนไฟล์ XSL และแปลงข้อมูลโดยพัฒนาโปรแกรม PHP ได้

เช่น เราต้องการแปลงข้อมูลในไฟล์ allResults.xml ให้เป็นตารางในไฟล์ HTML ดังแสดงในรูปที่ 1 และรูปที่ 2

รูปที่ 1



รูปที่ 2

ในการแปลงข้อมูลนั้นมีได้หลายวิีธี
1) อาจจะเขียนไฟล์ XSL ที่ไปดึงข้อมูลจาก allResults.xml โดยตรงก็ได้
2) ใช้ XML parser เพื่อดึงข้อมูลจาก allResults.xml แล้วเก็บไว้ในไฟล์ results.xml เพื่อให้เขียนไฟล์ XSL ได้ง่ายขึ้น

<?php
// โค้ดนี้ใช้วิธีที่ 2 ซึ่งใช้ XML parser เพื่อดึงข้อมูลจาก allResults.xml
// แล้วเก็บไว้ในไฟล์ results.xml เพื่อให้เขียนไฟล์ XSL ได้ง่ายขึ้น

// เขียน XML declaration ในไฟล์ xml results.xml
$xml_result = "";
$xml_result .= "";

// อ่านข้อมูลจากไฟล์ allResults.xml
$xml = simplexml_load_file("allResults.xml");

// เขียนข้อมูลของอิลิเมนต์ Theater ลงในไฟล์ results.xml
foreach ($xml->GetTheatersAndMoviesResult->Theater as $theater) {
$xml_result .= '';
$xml_result .= htmlspecialchars($theater->Name);
$xml_result .= '
';
$xml_result .= htmlspecialchars($theater->Address);
$xml_result .= '
';
}
$xml_result .="
";

// บันทึกข้อมูลลงไปในไฟล์
$fp = fopen('results.xml','w');
$write = fwrite($fp,$xml_result);
fclose($fp);

// เริ่มทำการแปลงโดยสร้างออปเจตก์ DOMDocument และ XSLTProcessor
$doc = new DOMDocument();
$xsl = new XSLTProcessor();

$xsl_filename = "results.xsl";

// โหลดข้อมูลจากไฟล์ XSL
$doc->load($xsl_filename);

// ระบุว่าให้ใช้ XSLTProcessor สำหรับออปเจกต์ DOM ที่สร้างขึ้นมา
$xsl->importStyleSheet($doc);

$xml_filename = "results.xml";

// โหลดข้อมูลจากไฟล์ XML
$doc->load($xml_filename);

// แสดงผลที่ได้จากการแปลงข้อมูล
echo $xsl->transformToXML($doc);
?>

// ไฟล์ XSL

วันเสาร์ที่ 26 เมษายน พ.ศ. 2551

การแปลงข้อมูล XML ให้อยู่ในรูปแบบที่ดูง่ายด้วย XSL และ PHP

บ่อยครั้งที่ข้อมูลที่เรามีอยู่ในรูปแบบ XML ซึ่งอาจจะได้มาจากการเรียกใช้เว็บเซอร์วิส หรือรูปแบบมาตรฐานของข้อมูลที่เราได้รับมา แต่เรามักจะพบว่าการอ่านข้อมูล XML นั้นไม่ค่อยง่ายเพราะมีแต่ตัวอักษร และหลายครั้งที่เราต้องการแปลงข้อมูลเหล่าีนี้อยู่ในรูปแบบของเว็บเพจเพื่อแ สดงให้คนอื่นดูด้วย

เราสามารถแปลงข้อมูล XML ให้อยู่ในรูปแบบที่ดูง่ายขึ้นด้วย XSL และ PHP

ตัวอย่างเช่น หากเรามีไฟล์ allResults.xml ที่เราได้รับจากการเรียก Yahoo Search ด้วยคำสำคัญ "Kanda Saikaew" ซึ่งถ้าหากเราดูแล้วจะพบว่ามีข้อมูลที่ซ้อนกันหลายชั้นและดูค่อนข้างจะสลับซับซ้อนดังแสดงในรูป

















ถ้าหากเราต้องการเพียงแ่ค่ชื่อของเว็บเพจและลิงก์ไปที่เว็บเพจนั้นเราก็สามาร ถทำได้โดยการคัดกรองเอาแต่ข้อมูลที่เราต้องการก่อนโดยการเขียนโปรแกรม XML Parser ด้วยภาษา PHP ดังนี้


<?php

$xml = simplexml_load_file('allResults.xml');

$xml_result = "<?xml version='1.0'?><results>";

$xml_result .="<name>Kanda Saikaew</name>";

foreach ($xml->Result as $result) {

$xml_result .= '<result><title>';

$xml_result .= htmlspecialchars($result->Title);

$xml_result .= '</title><url>';

$xml_result .= htmlspecialchars($result->Url);

$xml_result .= '</url></result>';

}

$xml_result .= "</results>";



$fp = fopen('results.xml','w');



$write = fwrite($fp,$xml_result);

fclose($fp);

?>




เราก็จะได้ไฟล์ results.xml



ซึ่งดูง่ายกว่าไฟล์แรกที่เรามี แต่ถ้าหากเราต้องการทำให้เป็นตารางในรูปแบบของเว็บเพจ เราก็จะเขียนไฟล์ results.xsl


<?xml version='1.0'?>

<xsl:stylesheet

xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version='1.0'>

<xsl:output method="html"/>

<xsl:template match="/results">

<html>

<head><title>Search Result by Yahoo</title></head>

<body>

<h1>Search Result for <xsl:value-of select="name"/></h1>

<table border="1">

<tr><th>Title</th><th>Url</th></tr>

<xsl:for-each select="result">

<tr><td><xsl:value-of select="title"/></td>

<td><a href="{url}"><xsl:value-of select="url"/></a></td></tr>

</xsl:for-each>

</table>

</body>

</html>

</xsl:template>

</xsl:stylesheet>






และเขียนโค้ด PHP เพื่ออ่านและแปลงข้อมูลจาก results.xml โดยอาศัยรูปแบบของการแสดงข้อมูลที่ระบุไว้ใน results.xsl ให้เป็น results.html


<?php



$doc = new DOMDocument();

$xsl = new XSLTProcessor();



$xsl_filename = "results.xsl";



$doc->load($xsl_filename);

$xsl->importStyleSheet($doc);



$xml_filename = "results.xml";



$doc->load($xml_filename);

echo $xsl->transformToXML($doc);



?>



แล้วเราก็จะได้ผลลัพธ์ที่ดูง่ายดังแสดงในรูปนี้