Restructing an XML file while Caching

I am trying to create a script to caching a remote XML files. The problem is that this XML file was poorly constructed and I can’t do anything about it.

XML file: http://www.boj.org.jm/uploads/tbills.xml

I would like to have the cached xml file to be restructured like this:

<tbills>
   <tbill>
      <title>Announcement</title>
      <doc>www.boj.org.jm/pdf/tbill_press_release_2010-07-13.doc</doc>
      <date>Jul 14 2010 12:00am</date>
   </tbill>
   <tbill>
      <title>Results</title>
      <doc>www.boj.org.jm/pdf/tbill_results_2010-june-23.doc</doc>
      <date>Jun 23 2010 12:00am</date>
   </tbill>
</tbill>

I can find tutorials that works if the source XML data is properly structured, but I can never seem to find one that addresses situations like this.

I found this code in a tutorial and tried to edit it to what I would need, but I’m stuck with 2 things.

[ol][li]How do I get this to change the structure of the XML when caching[/li]
[li]How do I use the call script and where do I put it?[/li][/ol]

Here’s what I’m done so far… My Caching script (caching.php)
[php]

<?php /* * Caching A small PHP class to */ class Caching { var $filePath = ""; var $apiURI = ""; function __construct($filePath, $apiURI) { //check if the file path and api URI are specified, if not: break out of construct. if (strlen($filePath) > 0 && strlen($apiURI) > 0) { //set the local file path and api path $this->filePath = $filePath; $this->apiURI = $apiURI; //does the file need to be updated? if ($this->checkForRenewal()) { //get the data you need $xml = $this->getExternalInfo(); //save the data to your file $this->stripAndSaveFile($xml); } else { //no need to update the file return true; } } else { echo "No file path and / or api URI specified."; return false; } } function checkForRenewal() { //set the caching time (in seconds) $cachetime = (60 * 60 * 24 * 1); //one day worth of seconds //get the file time $filetimemod = filemtime($this->filePath) + $cachetime; //if the renewal date is smaller than now, return true; else false (no need for update) if ($filetimemod < time()) { return true; } else { return false; } } function getExternalInfo() { if ($xml = @simplexml_load_file($this->apiURI)) { return $xml; } else { return false; } } function stripAndSaveFile($xml) { //put the artists in an array $tbill = $xml->TBILLS->ANNOUNCE; //building the xml object for SimpleXML $output = new SimpleXMLElement(""); //get only the top 10 for ($i = 0; $i < 10; $i++) { //create a new artist $insert = $output->addChild("announce"); //insert name and playcount childs to the artist $insert->addChild("link", $tbill[$i]->LINK); $insert->addChild("date", $tbill[$i]->DATE); } //save the xml in the cache file_put_contents($this->filePath, $output->asXML()); } } ?>

[/php]

My Calling script (calling.php)
[php]

<?php ini_set('display_errors', 1); error_reporting(E_ALL); include('caching.php'); $caching = new Caching($_SERVER['DOCUMENT_ROOT']."/boj/tbills.xml", "http://www.boj.org.jm/uploads/tbills.xml"); ?>

[/php]

If anyone can help, please… I will sincerely appreciate it.

Thanks in advance.

Best Regards,


Winchester

Sponsor our Newsletter | Privacy Policy | Terms of Service