<?php
/*************************************************************************** This is a functionality test-case for phpdomxml. This file also provides several examples on how to use the XML class. ***************************************************************************/
// Turn on all messages, notices and warnings error_reporting(E_ALL);
// Set this to the location where all files are stored $base = 'http://www.webtweakers.com:80/phpdomxml/beta/';
// Include the xml library include('lib.xml.inc.php');
?> <html> <head> <title>A small functionality test case</title> <style type="text/css"> body { background-color:#fff; color:#000; font-family:verdana,arial; font-size:8pt; } h1 { font-size:14pt; margin-bottom:0px; } .date { color:#999; } .comment { font-style:italic; display:none; width:100%; margin-top:5px; } .rawdoc { display:none; width:100%; height:150px; overflow:auto; border:1px solid #999; margin-top:5px; } .description { font-size:7pt; color:#999; } a { color:#009; text-decoration:none; } a:hover { text-decoration:underline; } hr { height:1; color:#000; } </style> <script type="text/javascript" language="javascript"> function dspSwitch(id) { var d = document.getElementById(id).style; d.display = (d.display == 'block')?'none':'block'; } </script> </head> <body>
<?php
// XML creation test =======================================================
// Tests: // - createElement // - createTextNode // - attributes // - appendChild // - toString
// Tests implicitely: // - hasChildNodes // - parentNode // - nodeType // - nodeName // - firstChild
// Create new xml object $test1 = new XML();
// Create user-element with id-attribute $user = $test1->createElement('user'); $user->attributes['id'] = 1;
// Append user-element to xml object $test1->appendChild($user);
// Create first-name element and attach it to user-element $fname = $test1->createElement('first-name'); $fname->appendChild($test1->createTextNode('Bas')); $user->appendChild($fname);
// Create last-name element and attach it to user-element $lname = $test1->createElement('last-name'); $lname->appendChild($test1->createTextNode('Gaalen, van')); $user->appendChild($lname);
// Create empty (attr only) age element and attach it to user-element $age = $test1->createElement('age'); $age->attributes['years'] = 31; $user->appendChild($age);
// Show result echo "<h1>XML creation test</h1>"; echo "<span class='description'>This example illustrates how to create an XML document using only the methods and properties of the XML class.</span><br><br>"; echo htmlentities($test1->toString())."<br><br>";
// XML load & parse test ===================================================
// Tests: // - firstChild // - nextSibling
// Tests implicitely: // - load // - parseXML
// Create new xml object, and load php's news feed $test2 = new XML('http://www.php.net/news.rss');
echo "<hr><h1>XML load & parse test (clickable)</h1>"; echo "<span class='description'>The rss-feed of php.net is read and parsed. Javascript is used on the fly to enhance the way the information is displayed.</span><br><br>"; echo "<a href='javascript:;' onclick=\"dspSwitch('rawdoc1')\">Raw XML document.</a>"; echo "<span id='rawdoc1' class='rawdoc'>".htmlentities($test2->toString())."</span><br><br>";
// Go to first item in doc, skipping channel-definition $item = $test2->firstChild->firstChild->nextSibling;
// Browse the news items $i = 1; while ($item) { $content = $item->firstChild; $title = $content->firstChild->nodeValue; $link = $content->nextSibling->firstChild->nodeValue; $description = $content->nextSibling->nextSibling->firstChild->nodeValue; $date = $content->nextSibling->nextSibling->nextSibling->firstChild->nodeValue; echo "<a href='javascript:;' onclick=\"dspSwitch('item$i')\">$title</a> [<span class='date'>$date</span>]<br>"; echo "<span id='item$i' class='comment'>$description [<a href='$link' target='_blank'>more</a>]<br><br></span>"; $item = $item->nextSibling; $i++; }
// XML messaging test ======================================================
// Tests: // - sendAndLoad
// Tests implicitely: // - toString // - parseXML
// Create new xml object, and load php's news feed $test3 = new XML(); $test3->xmlDecl = '<?xml version="1.0" encoding="ISO-8859-1" ?>';
// Create query element $query = $test3->createElement('query');
// Create name element $name = $test3->createElement('name'); $name->appendChild($test3->createTextNode('Bas van Gaalen')); $query->appendChild($name);
// Append query to object $test3->appendChild($query);
echo "<br><hr><h1>XML messaging test</h1>"; echo "<span class='description'>This example sends a message to a server (server.php), which in turn sends back a response.</span><br><br>"; echo "Client query:<br><b>".htmlentities($test3->toString())."</b><br><br>";
// Create response object $response = new XML();
// Send query and load response - change url if needed if ($test3->sendAndLoad($base.'server.php', $response)) { echo "Server response:<br><b>".htmlentities($response->toString())."</b><br>"; } else { echo "An error occured:<br><b>".$test3->error."</b><br>"; }
// XML cdata parsing test ==================================================
// Tests: // - parseXML // - CDATA section
echo "<br><hr><h1>XML parsing test</h1>"; echo "<span class='description'>This example reads an XML-document, parses it, and converts it back to text. Source and result should be the same.</span><br><br>";
$test4 = new XML('test4.xml');
echo "<a href='javascript:;' onclick=\"dspSwitch('rawdoc2')\">Raw XML document.</a>"; echo "<span id='rawdoc2' class='rawdoc'>".htmlentities($test4->toString())."</span><br><br>";
// XML nextSibling & previousSibling test ==================================
// Explicitely tests: // - nextSibling of _xml_get_children-method // - previousSibling of _xml_get_children-method
echo "<br><hr><h1>XML nextSibling & previousSibling test (1<sup>st</sup> method)</h1>"; echo "<span class='description'>An XML-document is read, parsed and the contents are displayed using nextSibling and previousSibling. The sibling-pointers are set within the parsing function.</span><br><br>";
$test5 = new XML('test5.xml');
echo "<a href='javascript:;' onclick=\"dspSwitch('rawdoc3')\">Raw XML document.</a>"; echo "<span id='rawdoc3' class='rawdoc'>".htmlentities($test5->toString())."</span><br><br>";
echo "<p>Walk tree with <b>nextSibling</b><br>"; $item = $test5->firstChild->firstChild; while ($item) { echo $item->attributes['number'].": ".$item->firstChild->nodeValue."<br>"; $item = $item->nextSibling; }
echo "<p>Walk tree with <b>previousSibling</b><br>"; $item = $test5->firstChild->lastChild; while ($item) { echo $item->attributes['number'].": ".$item->firstChild->nodeValue."<br>"; $item = $item->previousSibling; }
// XML nextSibling & previousSibling, 2nd method - test ====================
// Explicitely tests: // - nextSibling of appendChild-method // - previousSibling of appendChild-method
// Also tests: // - createElement // - createTextNode // - attributes
echo "<br><hr><h1>XML nextSibling & previousSibling test (2<sup>nd</sup> method)</h1>"; echo "<span class='description'>An XML-document is build from a PHP array. The contents are displayed using nextSibling and previousSibling. The sibling-pointers are set within the appendChild-method.</span><br><br>";
$list = array( 'some text here',
'some more text here',
'even more text here',
'still more text here'
);
$test6 = new XML(); $test6->xmlDecl = '<?xml version="1.0"?>';
$docelm = $test6->createElement('document');
// Loop through list and create XML elements foreach($list as $key=>$item) {
// $elmname = string, $$elmname = object $key++; $elmname = 'item'.$key; $$elmname = $test6->createElement('plain-text'); $$elmname->attributes['number'] = $key;
$$elmname->appendChild($test6->createTextNode($item));
$docelm->appendChild($$elmname); } $test6->appendChild($docelm);
echo "<a href='javascript:;' onclick=\"dspSwitch('rawdoc4')\">Raw XML document.</a>"; echo "<span id='rawdoc4' class='rawdoc'>".htmlentities($test6->toString())."</span><br><br>";
echo "<p>Walk tree with <b>nextSibling</b><br>"; $item = $test6->firstChild->firstChild; while ($item) { echo $item->attributes['number'].": ".$item->firstChild->nodeValue."<br>"; $item = $item->nextSibling; }
echo "<p>Walk tree with <b>previousSibling</b><br>"; $item = $test6->firstChild->lastChild; while ($item) { echo $item->attributes['number'].": ".$item->firstChild->nodeValue."<br>"; $item = $item->previousSibling; }
?>
</body> </html>
|