note 85970 added to function.xml-set-element-handler

From: Date: Fri, 26 Sep 2008 13:44:42 +0000
Subject: note 85970 added to function.xml-set-element-handler
Groups: php.notes 
Request: Send a blank email to php-notes+get-144745@lists.php.net to get a copy of this message
Here is another example of detecting empty elements. I works with libxml2. Note that it handles buffer boundaries. <?php $depth = 0; //current depth, used for pretty printing $empty = false; //whether the tag is empty $offset = 0; //the index of the start of the current buffer within the stream function tagStart($parser, $name, array $attribs) { global $depth, $empty, $data, $offset, $lastchar; $idx = xml_get_current_byte_index($parser); /* xml_get_current_byte_index returns index within the streams and not within the buffer.*/ /* Check if the index is within the buffer. */ if (isset($data[$idx - $offset])) { $c = $data[$idx - $offset]; } else { /* If it isn't simple use the last character of the buffer. */ $c = $lastchar; } $empty = $c == '/'; echo str_repeat("\t", $depth), "<$name", ($empty ? '/>' : '>'), "\n"; if (!$empty) ++$depth; } function tagEnd($parser, $name) { global $depth, $empty; if (!$empty) { --$depth; echo str_repeat("\t", $depth), "</$name>\n"; } else { $empty = false; } } $parser = xml_parser_create(); xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, false); xml_set_element_handler($parser, 'tagStart', 'tagEnd'); $data1 = ' <test> <empty att="3" /> <nocontent></nocontent> <content> <empty/> <empty/> </content> <empty/'; $data2 = '> <empty att="5" /> </test> '; $data = &$data1; $length = strlen($data1); $lastchar = $data[$length-1]; xml_parse($parser, $data1); $offset .= $length; $data = &$data2; xml_parse($parser, $data2); ---- Server IP: 83.137.20.135 Probable Submitter: 87.195.31.90 ---- Manual Page -- http://www.php.net/manual/en/function.xml-set-element-handler.php Edit -- https://master.php.net/note/edit/85970 Del: integrated -- https://master.php.net/note/delete/85970/integrated Del: useless -- https://master.php.net/note/delete/85970/useless Del: bad code -- https://master.php.net/note/delete/85970/bad+code Del: spam -- https://master.php.net/note/delete/85970/spam Del: non-english -- https://master.php.net/note/delete/85970/non-english Del: in docs -- https://master.php.net/note/delete/85970/in+docs Del: other reasons-- https://master.php.net/note/delete/85970 Reject -- https://master.php.net/note/reject/85970 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#144745) next »