{"id":1396,"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-5\/"},"modified":"2018-01-19T19:24:45","modified_gmt":"2018-01-19T19:24:45","slug":"dynamic-xml-conversion-using-the-sax-parser-page-5","status":"publish","type":"post","link":"https:\/\/phpbuilder.com\/dynamic-xml-conversion-using-the-sax-parser-page-5\/","title":{"rendered":"Dynamic XML Conversion Using the SAX Parser Page 5"},"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<div class=\"articleHeader\">\nThe element handling functions<\/div>\n<div class=\"articlePara\">\nThese functions are called by the SAX parser.\n<\/div>\n<div class=\"articlePara\">\nThese are the handling functions for opening tags and character data:\n<\/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 \/><\/span><span style=\"color: #007700\">function\u00a0<\/span><span style=\"color: #0000BB\">tag_open<\/span><span style=\"color: #007700\">(<\/span><span style=\"color: #0000BB\">$parser<\/span><span style=\"color: #007700\">,\u00a0<\/span><span style=\"color: #0000BB\">$name<\/span><span style=\"color: #007700\">,\u00a0<\/span><span style=\"color: #0000BB\">$attrs<\/span><span style=\"color: #007700\">)<br \/>\n<br \/>{<br \/>\n<br \/>\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"color: #0000BB\">push<\/span><span style=\"color: #007700\">(array(<\/span><span style=\"color: #DD0000\">\"attrs\"<\/span><span style=\"color: #007700\">=&gt;<\/span><span style=\"color: #0000BB\">$attrs<\/span><span style=\"color: #007700\">,\u00a0<\/span><span style=\"color: #DD0000\">\"contents\"<\/span><span style=\"color: #007700\">=&gt;<\/span><span style=\"color: #DD0000\">\"\"<\/span><span style=\"color: #007700\">));<br \/>\n<br \/>}<\/p>\n<p>function\u00a0<\/span><span style=\"color: #0000BB\">cdata<\/span><span style=\"color: #007700\">(<\/span><span style=\"color: #0000BB\">$parser<\/span><span style=\"color: #007700\">,<\/span><span style=\"color: #0000BB\">$string<\/span><span style=\"color: #007700\">)\u00a0{<br \/>\n<br \/>\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"color: #FF8000\">\/\/\u00a0Fetch\u00a0from\u00a0Stack,\u00a0insert\u00a0the\u00a0character\u00a0data,\u00a0and\u00a0put\u00a0it\u00a0back<br \/>\n<br \/>\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"color: #0000BB\">$data<\/span><span style=\"color: #007700\">=<\/span><span style=\"color: #0000BB\">pop<\/span><span style=\"color: #007700\">();<br \/>\n<br \/>\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"color: #0000BB\">$data<\/span><span style=\"color: #007700\">[<\/span><span style=\"color: #DD0000\">\"contents\"<\/span><span style=\"color: #007700\">].=<\/span><span style=\"color: #0000BB\">$string<\/span><span style=\"color: #007700\">;<br \/>\n<br \/>\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"color: #0000BB\">push<\/span><span style=\"color: #007700\">(<\/span><span style=\"color: #0000BB\">$data<\/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 addition to the attribute list we also store the character data inside the tag into the stack.\n<\/div>\n<div class=\"articlePara\">\nThe tag closing function is the most complicated part of the script. It works like this:\n<\/div>\n<div class=\"articleList\">\n<ol>\n<li>Pop the parameters and content from the stack\n<\/li>\n<li>\nIf a conversion function exists for this tag, call it and pass it the attributes and contents.Save its return value. If no conversion function is assigned to the current tag, rebuild the original tag\n<\/li>\n<li>\nPop the next set of data from the stack (the data of the tag surrounding the current one)\n<\/li>\n<li>\nAdd the saved return value to its contents data\n<\/li>\n<li>\nPut it back onto the stack\n<\/li>\n<\/ol>\n<\/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 \/><\/span><span style=\"color: #007700\">function\u00a0<\/span><span style=\"color: #0000BB\">tag_close<\/span><span style=\"color: #007700\">(<\/span><span style=\"color: #0000BB\">$parser<\/span><span style=\"color: #007700\">,<\/span><span style=\"color: #0000BB\">$name<\/span><span style=\"color: #007700\">)\u00a0{<br \/>\n<br \/>\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"color: #0000BB\">$function<\/span><span style=\"color: #007700\">=<\/span><span style=\"color: #DD0000\">\"handle_\"<\/span><span style=\"color: #007700\">.<\/span><span style=\"color: #0000BB\">strtolower<\/span><span style=\"color: #007700\">(<\/span><span style=\"color: #0000BB\">$name<\/span><span style=\"color: #007700\">);<br \/>\n<br \/>\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"color: #0000BB\">$data<\/span><span style=\"color: #007700\">=<\/span><span style=\"color: #0000BB\">pop<\/span><span style=\"color: #007700\">();<br \/>\n<br \/>\u00a0\u00a0\u00a0\u00a0<br \/>\n<br \/>\u00a0\u00a0\u00a0\u00a0if(<\/span><span style=\"color: #0000BB\">function_exists<\/span><span style=\"color: #007700\">(<\/span><span style=\"color: #0000BB\">$function<\/span><span style=\"color: #007700\">))\u00a0{<br \/>\n<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"color: #0000BB\">$buffer<\/span><span style=\"color: #007700\">=<\/span><span style=\"color: #0000BB\">call_user_func<\/span><span style=\"color: #007700\">(<\/span><span style=\"color: #0000BB\">$function<\/span><span style=\"color: #007700\">,<\/span><span style=\"color: #0000BB\">$data<\/span><span style=\"color: #007700\">[<\/span><span style=\"color: #DD0000\">\"contents\"<\/span><span style=\"color: #007700\">],<\/span><span style=\"color: #0000BB\">$data<\/span><span style=\"color: #007700\">[<\/span><span style=\"color: #DD0000\">\"attrs\"<\/span><span style=\"color: #007700\">]);<br \/>\n<br \/>\u00a0\u00a0\u00a0\u00a0}<br \/>\n<br \/>\u00a0\u00a0\u00a0\u00a0else\u00a0{<br \/>\n<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"color: #0000BB\">$buffer<\/span><span style=\"color: #007700\">=<\/span><span style=\"color: #0000BB\">create_xml_tag<\/span><span style=\"color: #007700\">(<\/span><span style=\"color: #0000BB\">$name<\/span><span style=\"color: #007700\">,\u00a0<\/span><span style=\"color: #0000BB\">$data<\/span><span style=\"color: #007700\">[<\/span><span style=\"color: #DD0000\">\"attrs\"<\/span><span style=\"color: #007700\">],\u00a0<\/span><span style=\"color: #0000BB\">$data<\/span><span style=\"color: #007700\">[<\/span><span style=\"color: #DD0000\">\"contents\"<\/span><span style=\"color: #007700\">]);<br \/>\n<br \/>\u00a0\u00a0\u00a0\u00a0}<br \/>\n<br \/>\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"color: #0000BB\">$sublevel<\/span><span style=\"color: #007700\">=<\/span><span style=\"color: #0000BB\">pop<\/span><span style=\"color: #007700\">();<br \/>\n<br \/>\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"color: #0000BB\">$sublevel<\/span><span style=\"color: #007700\">[<\/span><span style=\"color: #DD0000\">\"contents\"<\/span><span style=\"color: #007700\">].=<\/span><span style=\"color: #0000BB\">$buffer<\/span><span style=\"color: #007700\">;<br \/>\n<br \/>\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"color: #0000BB\">push<\/span><span style=\"color: #007700\">(<\/span><span style=\"color: #0000BB\">$sublevel<\/span><span style=\"color: #007700\">);<br \/>\n<br \/>}\u00a0<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\">\nCharacter data is passed through, as are tags that are not handled by a conversion function.<br \/>\nSo you don&#8217;t have to write a handling function for every tag in your document, because they<br \/>\nstay unchanged. You can take a valid XHTML document as input for the converter, and the output<br \/>\nwill be the same document except for the tags replaced by your conversion functions.\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=\"scheffler20030325fdb0.html?page=4\">\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=\"float:left; padding:2px 4px 2px 4px;\"><a class=\"pageNumber\" href=\"scheffler20030325fdb0.html?page=4\">4<\/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;\">5<\/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=\"scheffler20030325c575.html?page=6\">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-1396","post","type-post","status-publish","format-standard","hentry","category-tutorials"],"_links":{"self":[{"href":"https:\/\/phpbuilder.com\/wp-json\/wp\/v2\/posts\/1396","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=1396"}],"version-history":[{"count":1,"href":"https:\/\/phpbuilder.com\/wp-json\/wp\/v2\/posts\/1396\/revisions"}],"predecessor-version":[{"id":3266,"href":"https:\/\/phpbuilder.com\/wp-json\/wp\/v2\/posts\/1396\/revisions\/3266"}],"wp:attachment":[{"href":"https:\/\/phpbuilder.com\/wp-json\/wp\/v2\/media?parent=1396"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/phpbuilder.com\/wp-json\/wp\/v2\/categories?post=1396"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/phpbuilder.com\/wp-json\/wp\/v2\/tags?post=1396"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}