XML Tutorial

DTD Tutorial

XPath Tutorial



Generate XML file in PHP SimpleXML DOM Reader/Writer Method


Generate XML file dynamically using PHP three different method,

Following table explain which are the good method to follow the standard and which are not.

Operation DOM XML Reader/Writer SimpleXML
Read
Poorly support
Write
Poorly support
Manipulate
Poorly support

Poorly support
Full Control
Namespace Support
Poorly support
XPATH Support
Validate

DOM (Document Object Model) XML Method

DOM Advantages :

  • Very fast for small document, load entire document into memory.
  • Simple PHP DOM interface.
  • Access anything in tree, traversed in multitude of way.
  • XML parsing library, libXML2 use for a DOM.

DOM Disadvantages :

  • Load entire document into memory.
  • Data access only after completely document parsed.
  • Support PHP 5+ or later version.

Create DOM XML

<?php
	$dom = new DOMDocument('1.0','UTF-8');
	$dom->formatOutput = true;

	$root = $dom->createElement('student');
	$dom->appendChild($root);

	$result = $dom->createElement('result');
	$root->appendChild($result);

	$result->setAttribute('id', 1);
	$result->appendChild( $dom->createElement('name', 'Opal Kole') );
	$result->appendChild( $dom->createElement('sgpa', '8.1') );
	$result->appendChild( $dom->createElement('cgpa', '8.4') );

	echo '<xmp>'. $dom->saveXML() .'</xmp>';
	$dom->save('result.xml') or die('XML Create Error');
?>

Result Output :

<?xml version="1.0" encoding="UTF-8"?>
<student>
	<result id="1">
		<name>Opal Kole</name>
		<sgpa>8.1</sgpa>
		<cgpa>8.4</cgpa>
	</result>
</student>

Manipulate DOM XML

Manipulate above created XML file.

<?php
	$dom = new DOMDocument();
	$dom->formatOutput = true;

	$dom->load('result.xml', LIBXML_NOBLANKS);

	$root = $dom->documentElement;
	$newresult = $root->appendChild( $dom->createElement('result') );

	$newresult->setAttribute('id', 2);
	$newresult->appendChild( $dom->createElement('name','Max Miller') );
	$newresult->appendChild( $dom->createElement('sgpa','8.7') );
	$newresult->appendChild( $dom->createElement('cgpa','8.2') );

	echo ''. $dom->saveXML() .'';
	$dom->save('new_result.xml') or die('XML Manipulate Error');
?>

Result Output :

result.xml
<?xml version="1.0" encoding="UTF-8"?>
<student>
	<result id="1">
		<name>Opal Kole</name>
		<sgpa>8.1</sgpa>
		<cgpa>8.4</cgpa>
	</result>
	<result id="2">
		<name>Max Miller</name>
		<sgpa>8.7</sgpa>
		<cgpa>8.2</cgpa>
	</result>
</student>

Read DOM XML

<?php
	$dom = new DOMDocument();
	$dom->load('new_result.xml');

	$root = $dom->documentElement;
	echo "This document is store " . $root->tagName . " Result Information" . "
"; $results = $root->getElementsByTagName( 'result' ); foreach( $results as $result){ echo 'Result Id: ' . $result->getAttribute('id'); foreach( $result->getElementsByTagName('name') as $name ){ echo ' Student ' . $name->nodeValue; } foreach( $result->getElementsByTagName('sgpa') as $sgpa ){ echo ' SGPA ' . $sgpa->nodeValue; } foreach( $result->getElementsByTagName('cgpa') as $cgpa ){ echo ' CGPA ' . $cgpa->nodeValue . "
"; } } ?>

Result Output :

new_result.xml
This document is store student Result Information
Result Id: 1 Student Opal Kole SGPA 8.1 CGPA 8.4
Result Id: 2 Student Max Miller SGPA 8.7 CGPA 8.2

XML Reader/Writer Method

XML Reader/Writer Advantages :

  • Uses little memory for reading and writing.
  • Allowing for accessing immediately.
  • Support PHP4+ and PHP5+.

XML Reader/Writer Disadvantages :

  • Reading data only sequential.
  • All method are slow for accessing data.

XML Reader Example

<?php
	$reader = new XMLReader();
	$reader->open('new_result.xml');

	while( $reader->read() ){
		if($reader->nodeType !== XMLReader::ELEMENT){
			continue;
		}
		if($reader->localName === 'result'){
			echo 'Result Id: ' . $reader->getAttribute('id');
		}
		if($reader->localName === 'name'){
			echo ' Student ' . $reader->readString();
		}
		if($reader->localName === 'sgpa'){
			echo ' SGPA ' . $reader->readString();
		}
		if($reader->localName === 'cgpa'){
			echo ' CGPA ' . $reader->readString() . "
";; } } ?>

Result Output :

Result Id: 1 Student Opal Kole SGPA 8.1 CGPA 8.4
Result Id: 2 Student Max Miller SGPA 8.7 CGPA 8.2

XML Writer Example

<?php
	$writer = new XMLWriter();
	$writer->openUri('result.xml');

	$writer->setIndentString('  ');
	$writer->setIndent(true);

	$writer->startDocument( '1.0', 'UTF-8' );
	$writer->startElement('student');

	$writer->startElement('result');
	$writer->writeAttribute('id', '1');

	$writer->writeElement('name', 'Opal Kole');
	$writer->writeElement('sgpa', '8.1');
	$writer->writeElement('cgpa', '8.4');
	$writer->endElement();   /* </result> */

	$writer->flush();
	$writer->endElement();	/* </student> */
	$writer->endDocument();
?>

Result Output :

result.xml
<?xml version="1.0" encoding="UTF-8"?>
<student>
	<result id="1">
		<name>Opal Kole</name>
		<sgpa>8.1</sgpa>
		<cgpa>8.4</cgpa>
	</result>
</student>

SimpleXML Reading/Writing

SimpleXML Writing

<?php
	$simple_xml = new SimpleXMLElement('<student></student>');

	$simple_xml->addChild('result');
	$simple_xml->result[0]->addAttribute('id', 1);

	$simple_xml->result[0]->addChild('name', 'Opal Kole');
	$simple_xml->result[0]->addChild('sgpa', '8.1');
	$simple_xml->result[0]->addChild('cgpa', '8.4');

	$simple_xml->asXML('simple_xml_create.xml');
?>

Result Output :

simple_xml_create.xml
<?xml version="1.0"?>
<student><result id="1"><name>Opal Kole</name><sgpa>8.1</sgpa><cgpa>8.4</cgpa></result></student>

SimpleXML Reading

<?php
	$simple_xml = simplexml_load_file('simple_xml_create.xml');

	foreach( $simple_xml->result as $result){
		echo 'Result Id: ' . $result['id'] . 
			' Student ' . $result->name .
			' SGPA ' . $result->sgpa .
			' CGPA ' . $result->cgpa . "
"; } ?>

Result Output :

Result Id: 1 Student Opal Kole SGPA 8.1 CGPA 8.4