Location: PHPKode > scripts > dom xml class > dom-xml-class/functest.php
<?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>
Return current item: dom xml class