PHPBuilder - Dynamic XML Conversion Using the SAX Parser Page 4

RSS Twitter

Dynamic XML Conversion Using the SAX Parser - Page 4

by: PHP Builder Staff
April 28, 2003

What Is A Stack?

A stack is a simple data structure. It has two operations: Put data onto stack("push") and take data from stack ("pop").
Imagine a stack of pizza boxes: You can put pizza Nr 1 on the stack, then pizza Nr 2, pizza Nr 3.
When you now take the pizzas from the top of the stack, you get them in reverse order: Pizza 3, Pizza 2, Pizza 1.
Here is the code for the stack:


push($data) {

pop() {
count($stack)==0) {
"Error: Buffer Underflow!");
In valid XML tags must not overlap, and for every opening tag there is a closing tag. The SAX parser walks through the script, and for every opening tag it reaches, our script will put its attributes onto the stack. Then, when it reaches a closing tag, it takes one level from the stack. So when the parser is converting a document, and it has already processed 13 opening tags and 8 closing tags, there will be 5 elements on the stack.
As in XML the number of opening tags has to equal the number of closing tags, the stack will be empty when the parser reaches the end of the document. And as there are no overlapping tags, the data sets are always fetched in the correct order.
Here is a list of the steps our script will take to walk through a short piece of XML (the XML file contains no character data, so only the opening and closing functions are called by SAX).
	<tag1 parameter="Param 1">
		<tag2 parameter="Param 2">
			<tag3 parameter="Param 3">
Parsed element       
<tag1 parameter="Param 1">
<tag2 parameter="Param 2">        
<tag3 parameter="Param 3">        
</tag3>   handle_tag3(pop());
</tag2>   handle_tag2(pop());
</tag1>   handle_tag1(pop());
</doc>    handle_doc(pop());
push(array( 'PARAMETER'=>'Param 1'));
push(array('PARAMETER'=>'Param 2'));
push(array('PARAMETER'=>'Param 3'));
//receives array(''PARAMETER'=>'Param 3')
//receives array('PARAMETER'=>'Param 2')
//receives array( 'PARAMETER'=>'Param 1')
//receives array()

« Previous Page
Next Page »

Comment and Contribute

Your comment has been submitted and is pending approval.




(Maximum characters: 1200). You have characters left.