spacer

Webref WebRef   Sitemap · Experts · Tools · Services · Newsletters · About i.com

home / programming / php / php4xml / chap10 / 4 To page 1current pageTo page 3To page 4To page 5
[previous] [next]

Professional PHP4 XML, Chapter 10: Putting It Together

Developer News
Microsoft Shows Off Silverlight 4, IE9 Plans
Metasploit Expands Vulnerability Test Framework
HyperCard Reborn?

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.


home / programming / php / php4xml / chap10 / 4 To page 1current pageTo page 3To page 4To page 5
[previous] [next]

internet.commediabistro.comJusttechjobs.comGraphics.com

Search:

WebMediaBrands Corporate Info

Legal Notices, Licensing, Permissions, Privacy Policy.
Advertise | Newsletters | Shopping | E-mail Offers | Freelance Jobs

webref The latest from WebReference.com Browse >
Rolling Out Your Own HTML Application Version Control · HTML 5: Client-side Storage · Working with Ajax Server Extensions
Sitemap · Experts · Tools · Services · Email a Colleague · Contact FREE Newsletters 
 The latest from internet.com
Wi-Fi Product Watch, November 2009 · Chip Market Recovering From '08 Collapse · Low-Cost Tools to Kickstart Your New Business

Created: September 3, 2002
Revised: September 3, 2002

URL: http://webreference.com/programming/php/php4xml/chap10/4/2.html