WebReference.com - Part 4 of Chapter 10 from Professional PHP4 XML, from Wrox Press Ltd (2/5)
[previous] [next] |
Professional PHP4 XML, Chapter 10: Putting It Together
Manual Writing
Manual writing is a simple and intuitive way of writing XML documents - create a string with the desired XML. Simple PHP string management is used to generate the XML file. Generating the XML manually implies that the writing function must generate well-formed XML data. We will have to parse the strings and convert special characters such as &
to the proper XML entities that represent them.
For our example we'll be using the following class that parses the .txt
file with the to-do list to generate an array:
class ParseToDoTxt
{
var $persons = Array();
function ParseFile($filename)
{
$f = fopen($filename, "r");
if (!$f) {
return 0;
}
$txt = fread($f, filesize($filename));
return $this->ParseString($txt);
}
function GetPersons()
{
return $this->persons;
}
function ParseString($txt)
{
$lines = Array();
$line = Array();
$lines = explode("\n", $txt);
foreach ($lines as $line) {
$line = chop($line);
$line = explode(",", $line);
if (!isset($this->persons[$line[0]])) {
$this->persons[$line[0]] = Array();
}
$this->persons[$line[0]][] = $line[1];
}
return 1;
}
}
The following bit of code generates the XML file:
$parser = new ParseToDoTxt();
$parser->ParseFile("todo.txt");
$persons = $parser->GetPersons();
$xml = '<?xml version="1.0"?>';
$xml .= '<to-do>';
foreach ($persons as $person => $tasks) {
$xml .= '<person>';
$xml .= '<name>'.XmlEntities($person).'</name>';
$xml .= '<tasks>';
foreach ($tasks as $task) {
$xml .= '<task>';
$xml .= XmlEntities($task);
$xml .= '</task>';
}
$xml .= '</tasks>';
$xml .= '</person>';
}
$xml .= '</to-do>';
print ($xml);
The XmlEntities()
function replaces special characters with their corresponding XML entities:
function XmlEntities($data)
{
$position = 0;
$length = strlen($data);
$escapeddata = "";
for(;$position<$length;) {
$character = substr($data, $position, 1);
$code = Ord($character);
switch($code) {
case 34:
$character = """;
break;
case 38:
$character = "&";
break;
case 39:
$character = "'";
break;
case 60:
$character = "<";
break;
case 62:
$character = ">";
break;
default:
if ($code<32)
$character = ("".strval($code).";");
break;
}
$escapeddata .= $character;
$position++;
}
return $escapeddata;
}
We can use this code as a method of the parsing class, or build a new XmlWriter
class that uses the parsing class and constructs an XML string storing it as a property of the object. Without worrying about where we use the code we can see that the code is easy to understand and fairly easy to write too.
Manual writing is a simple and flexible way to write XML, however, such documents are difficult to maintain as encoding entities and producing well-formed XML documents is 100% the responsibility of the program.
[previous] [next] |
Created: September 3, 2002
Revised: September 3, 2002
URL: https://webreference.com/programming/php/php4xml/chap10/4/2.html