{"id":1398,"date":"2018-01-19T19:22:47","date_gmt":"2018-01-19T19:22:47","guid":{"rendered":"http:\/\/goofy-trucks.flywheelsites.com\/dynamic-xml-conversion-using-the-sax-parser-page-4\/"},"modified":"2018-01-19T19:24:45","modified_gmt":"2018-01-19T19:24:45","slug":"dynamic-xml-conversion-using-the-sax-parser-page-4","status":"publish","type":"post","link":"https:\/\/phpbuilder.com\/dynamic-xml-conversion-using-the-sax-parser-page-4\/","title":{"rendered":"Dynamic XML Conversion Using the SAX Parser Page 4"},"content":{"rendered":"<div class=\"phpbuilder-content\">\n<div class=\"phpbuilder-meta\">\n<div class=\"\">By PHP Builder Staff<\/div>\n<div class=\"\">on April 28, 2003<\/div>\n<\/p><\/div>\n<div id=\"overflow-content\">\n<h2>What Is A Stack?<\/h2>\n<div class=\"articlePara\">\nA stack is a simple data structure.<br \/>\nIt has two operations: Put data onto stack(&#8220;push&#8221;) and take data from stack (&#8220;pop&#8221;).\n<\/div>\n<div class=\"articlePara\">\nImagine a stack of pizza boxes: You can put pizza Nr 1 on the stack, then pizza Nr 2, pizza Nr 3.<\/div>\n<div class=\"articlePara\">\nWhen you now take the pizzas from the top of the stack, you get them in reverse order: Pizza 3, Pizza 2, Pizza 1.\n<\/div>\n<div class=\"articlePara\">\nHere is the code for the stack: <\/div>\n<div class=\"articlePhpEx\">\n<font face=\"courier\"><code><span style=\"color: #000000\"><\/p>\n<p><span style=\"color: #0000BB\">&lt;?php<br \/>\n<br \/>$stack<\/span><span style=\"color: #007700\">=array();<\/p>\n<p>function\u00a0<\/span><span style=\"color: #0000BB\">push<\/span><span style=\"color: #007700\">(<\/span><span style=\"color: #0000BB\">$data<\/span><span style=\"color: #007700\">)\u00a0{<br \/>\n<br \/>\u00a0\u00a0\u00a0\u00a0global\u00a0<\/span><span style=\"color: #0000BB\">$stack<\/span><span style=\"color: #007700\">;<br \/>\n<br \/>\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"color: #0000BB\">array_push<\/span><span style=\"color: #007700\">(<\/span><span style=\"color: #0000BB\">$stack<\/span><span style=\"color: #007700\">,<\/span><span style=\"color: #0000BB\">$data<\/span><span style=\"color: #007700\">);<br \/>\n<br \/>}<\/p>\n<p>function\u00a0<\/span><span style=\"color: #0000BB\">pop<\/span><span style=\"color: #007700\">()\u00a0{<br \/>\n<br \/>\u00a0\u00a0\u00a0\u00a0global\u00a0<\/span><span style=\"color: #0000BB\">$stack<\/span><span style=\"color: #007700\">;<br \/>\n<br \/>\u00a0\u00a0\u00a0\u00a0if(<\/span><span style=\"color: #0000BB\">count<\/span><span style=\"color: #007700\">(<\/span><span style=\"color: #0000BB\">$stack<\/span><span style=\"color: #007700\">)==<\/span><span style=\"color: #0000BB\">0<\/span><span style=\"color: #007700\">)\u00a0{<br \/>\n<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0die(<\/span><span style=\"color: #DD0000\">\"Error:\u00a0Buffer\u00a0Underflow!\"<\/span><span style=\"color: #007700\">);<br \/>\n<br \/>\u00a0\u00a0\u00a0\u00a0}<br \/>\n<br \/>\u00a0\u00a0\u00a0\u00a0return\u00a0<\/span><span style=\"color: #0000BB\">array_pop<\/span><span style=\"color: #007700\">(<\/span><span style=\"color: #0000BB\">$stack<\/span><span style=\"color: #007700\">);<br \/>\n<br \/>}<br \/>\n<br \/><\/span><span style=\"color: #0000BB\">?&gt;<br \/>\n<br \/><\/span><br \/>\n<\/span><br \/>\n<\/code><\/font><\/div>\n<div class=\"articlePara\">\nIn valid XML tags must not overlap, and for every opening tag there is a closing tag. The SAX parser walks through<br \/>\nthe script, and for every opening tag it reaches, our script will put its attributes onto the stack. Then, when it<br \/>\nreaches a closing tag, it takes one level from the stack.<br \/>\nSo when the parser is converting a document, and it has already processed 13 opening tags and 8 closing tags,<br \/>\nthere will be 5 elements on the stack.\n<\/div>\n<div class=\"articlePara\">\nAs in XML the number of opening tags has to equal the number of closing tags, the stack will be empty when<br \/>\nthe parser reaches the end of the document. And as there are no overlapping tags, the data sets are always<br \/>\nfetched in the correct order. <\/div>\n<div class=\"articlePara\">\nHere is a list of the steps our script will take to walk through a short piece of XML (the XML file contains<br \/>\nno character data, so only the opening and closing functions are called by SAX). <\/div>\n<div class=\"example\">\n<pre>\n&lt;doc&gt;\n\t&lt;tag1 parameter=\"Param 1\"&gt;\n\t\t&lt;tag2 parameter=\"Param 2\"&gt;\n\t\t\t&lt;tag3 parameter=\"Param 3\"&gt;\n\t\t\t&lt;\/tag3&gt;\n\t\t&lt;\/tag2&gt;\n\t&lt;\/tag1&gt;\n&lt;\/doc&gt;\n<\/pre>\n<\/div>\n<div class=\"articlePara\">\n<table cellpadding=\"5\" cellspacing=\"0\" border=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td valign=\"top\">\n<pre>Parsed element       \n&lt;tag1 parameter=\"Param 1\"&gt;\n&lt;tag2 parameter=\"Param 2\"&gt;        \n&lt;tag3 parameter=\"Param 3\"&gt;        \n&lt;\/tag3&gt;   handle_tag3(pop());\n&lt;\/tag2&gt;   handle_tag2(pop());\n&lt;\/tag1&gt;   handle_tag1(pop());\n&lt;\/doc&gt;    handle_doc(pop());\n      <\/pre>\n<\/td>\n<td valign=\"top\">\n<pre>Action\npush(array( 'PARAMETER'=&gt;'Param 1'));\npush(array('PARAMETER'=&gt;'Param 2'));\npush(array('PARAMETER'=&gt;'Param 3'));\n\/\/receives array(''PARAMETER'=&gt;'Param 3')\n\/\/receives array('PARAMETER'=&gt;'Param 2')\n\/\/receives array( 'PARAMETER'=&gt;'Param 1')\n\/\/receives array()\n      <\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><\/p>\n<div style=\"float: left; padding:15px; color:#17AAF3\">\n<div style=\"float:left; padding:2px;\"><a class=\"paginationPageLink\" href=\"scheffler200303259ba9.html?page=3\">\u00ab Previous Page<\/a><\/div>\n<div style=\"float:left; padding:2px 4px 2px 4px;\"><a class=\"pageNumber\" href=\"scheffler20030325.html\">1<\/a> <\/div>\n<div style=\"float:left; font-size:16px; color:#FF7A22; padding:2px 2px 2px 2px; \">| <\/div>\n<div style=\"float:left; padding:2px 4px 2px 4px;\"><a class=\"pageNumber\" href=\"scheffler200303254658.html?page=2\">2<\/a> <\/div>\n<div style=\"float:left; font-size:16px; color:#FF7A22; padding:2px 2px 2px 2px; \">| <\/div>\n<div style=\"float:left; padding:2px 4px 2px 4px;\"><a class=\"pageNumber\" href=\"scheffler200303259ba9.html?page=3\">3<\/a> <\/div>\n<div style=\"float:left; font-size:16px; color:#FF7A22; padding:2px 2px 2px 2px; \">| <\/div>\n<div style=\"background-color:#B6E5FC; font-size:16px; margin-top:1px; padding:1px 4px 1px 4px; color:#000; font-style:bold; float:left;\">4<\/div>\n<div style=\"float:left; font-size:16px; color:#FF7A22; padding:2px 2px 2px 2px; \">| <\/div>\n<div style=\"float:left; padding:2px 4px 2px 4px;\"><a class=\"pageNumber\" href=\"scheffler20030325af4d.html?page=5\">5<\/a> <\/div>\n<div style=\"float:left; font-size:16px; color:#FF7A22; padding:2px 2px 2px 2px; \">| <\/div>\n<div style=\"float:left; padding:2px 4px 2px 4px;\"><a class=\"pageNumber\" href=\"scheffler20030325c575.html?page=6\">6<\/a> <\/div>\n<div style=\"float:left; font-size:16px; color:#FF7A22; padding:2px 2px 2px 2px; \">| <\/div>\n<div style=\"float:left; padding:2px 4px 2px 4px;\"><a class=\"pageNumber\" href=\"scheffler20030325235c.html?page=7\">7<\/a> <\/div>\n<div style=\"float:left; padding:2px;\"><a class=\"paginationPageLink\" href=\"scheffler20030325af4d.html?page=5\">Next Page \u00bb<\/a><\/div>\n<\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>This article describes an alternative way of converting XML to HTML using the SAX parser. For each tag you<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-1398","post","type-post","status-publish","format-standard","hentry","category-tutorials"],"_links":{"self":[{"href":"https:\/\/phpbuilder.com\/wp-json\/wp\/v2\/posts\/1398","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/phpbuilder.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/phpbuilder.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/phpbuilder.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/phpbuilder.com\/wp-json\/wp\/v2\/comments?post=1398"}],"version-history":[{"count":1,"href":"https:\/\/phpbuilder.com\/wp-json\/wp\/v2\/posts\/1398\/revisions"}],"predecessor-version":[{"id":3268,"href":"https:\/\/phpbuilder.com\/wp-json\/wp\/v2\/posts\/1398\/revisions\/3268"}],"wp:attachment":[{"href":"https:\/\/phpbuilder.com\/wp-json\/wp\/v2\/media?parent=1398"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/phpbuilder.com\/wp-json\/wp\/v2\/categories?post=1398"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/phpbuilder.com\/wp-json\/wp\/v2\/tags?post=1398"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}