My XML document sample:
<?xml version="1.0" encoding="UTF-8"?> <catalog> <spectacle> <image>images/8780_185540_img2.jpg</image> <date>16.09.10</date> <time>19:00</time> <title>Hamlet</title> <author>W.Shakespeare</author> <genre> tragedy</genre> </spectacle> </catalog>HTML action :
<form method="post" action="begin.php" name="adminForm" >
Exists 3 methods in PHP 5 which allow us to interact with XML: DOM, Simple XML and XPath.
The simplest way is to use Simple XML :). But it have and disadvantages when you need more methods to interact with XML, in this cases you may use DOM.
When you want to get an element use:
$catalog->spectacle[0]; //return sprectacleWhen you want to get an attribute use:
$image['att_name'];When you want to get data use:
echo ($xml->catalog->spectacle[0]->title);
So here is my source code:
$spectacles = Array();
/*add to xml specified spectacle node*/
function addToXml()
{
$xml = simplexml_load_file("catalog.xml"); //This line will load the XML file.
$sxe = new SimpleXMLElement($xml->asXML());
//The following lines will add a new child
$spectacle = $sxe->addChild("spectacle");
$spectacle->addChild("image", $_POST["image"]);
$spectacle->addChild("date", $_POST["date"]);
$spectacle->addChild("time", $_POST["time"]);
$spectacle->addChild("title", $_POST["title"]);
$spectacle->addChild("author", $_POST["author"]);
$spectacle->addChild("genre", $_POST["genre"]);
//use for format output
$dom = new DOMDocument('1.0');
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($sxe->asXML());
$dom->saveXML();
$dom->save("catalog.xml");
}
/*loading xml to global array*/
function loadXML()
{
global $spectacles;
$xml = simplexml_load_file("catalog.xml");
foreach($xml->spectacle as $spectacle)
{
array_push($spectacles, $spectacle);
}
}
/*showing xml in table view*/
function showXML()
{
//print_r($spectacles);
global $spectacles;
echo "<table border='1'><tr>";
echo "<td>Image</td>";
echo "<td>Date</td>";
echo "<td>Time</td>";
echo "<td>Title</td>";
echo "<td>Author</td>";
echo "<td>Genre</td>";
echo "</tr>\n";
foreach ($spectacles as $spectacle)
{
echo "<tr>";
echo "<td>".$spectacle->image."</td>";
echo "<td>".$spectacle->date."</td>";
echo "<td>".$spectacle->time."</td>";
echo "<td>".$spectacle->title."</td>";
echo "<td>".$spectacle->author."</td>";
echo "<td>".$spectacle->genre."</td>";
echo "</tr>\n";
}
echo "</table";
}
/*delete node with specified date & title*/
function deleteNodeXML()
{
global $spectacles;
$spectacle_final = Array();
foreach($spectacles as $spectacle)
{
if($spectacle->date != $_POST['date'] && $spectacle->title != $_POST['title'])
{
array_push($spectacle_final, $spectacle);
}
}
saveDom($spectacle_final); //saving our array to xml
}
/*edit node with specified date & title*/
function editXml()
{
global $spectacles;
$spectacle_final = Array();
foreach($spectacles as $spectacle)
{
if($spectacle->date == $_POST['date'] && $spectacle->title == $_POST['title'])
{
$spectacle->image = $_POST['imageNew'];
$spectacle->date = $_POST['dateNew'];
$spectacle->time = $_POST['timeNew'];
$spectacle->title = $_POST['titleNew'];
$spectacle->author = $_POST['authorNew'];
$spectacle->genre = $_POST['genreNew'];
array_push($spectacle_final, $spectacle);
}
else
{
array_push($spectacle_final, $spectacle);
}
}
saveDom($spectacle_final); //saving our array to xml
}
/*saving array to xml*/
function saveDom($spectacle_final)
{
$doc = new DOMDocument('1.0','UTF-8');
$doc->encoding='UTF-8';
// we want a nice output
$doc->formatOutput = true;
$root = $doc->createElement('catalog');
$root = $doc->appendChild($root);
foreach($spectacle_final as $spectacle)
{
$spect = $doc->createElement('spectacle');
$spect = $root->appendChild($spect);
$imag = $doc->createElement('image');
$imag = $spect->appendChild($imag);
$text = $doc->createTextNode($spectacle->image);
$text = $imag->appendChild($text);
$dat = $doc->createElement('date');
$dat = $spect->appendChild($dat);
$text = $doc->createTextNode($spectacle->date);
$text = $dat->appendChild($text);
$tim = $doc->createElement('time');
$tim = $spect->appendChild($tim);
$text = $doc->createTextNode($spectacle->time);
$text = $tim->appendChild($text);
$tit = $doc->createElement('title');
$tit = $spect->appendChild($tit);
$text = $doc->createTextNode($spectacle->title);
$text = $tit->appendChild($text);
$aut = $doc->createElement('author');
$aut = $spect->appendChild($aut);
$text = $doc->createTextNode($spectacle->author);
$text = $aut->appendChild($text);
$gen = $doc->createElement('genre');
$gen = $spect->appendChild($gen);
$text = $doc->createTextNode($spectacle->genre);
$text = $gen->appendChild($text);
}
$doc->saveXML() . "\n";
$doc->save("catalog.xml");
}
References: Using XML: A PHP Developer's Primer
Official php documentation
No comments:
Post a Comment