note 66182 added to ref.xml

From: Date: Tue, 16 May 2006 18:44:19 +0000
Subject: note 66182 added to ref.xml
Groups: php.notes 
Request: Send a blank email to php-notes+get-111400@lists.php.net to get a copy of this message
--xml2array part4-- After vladson, guyemup, HansP, BinnyVA, aerik, adrianus and sander ... here's my contrib. for the mythic xml2array with 'no library'. It corrects multi tags and ... impl. CDATA ... with no recursivity. ex: <code id="code1"> <elements> <elements> <elements>text1</elements> <elements>text2</elements> <elements><![CDATA[A bunch of <a href="#">code</a>]]></elements> </elements> </elements> </code> <? function xml2array($xml) { $xmlary = array (); $fCdata = false; // flag CDATA $RgE = '/<(\/|\!\[CDATA\[)?(\w+)((?:[^">]*|"[^"]*")*)(?:\/>|>)([^<]*)/'; preg_match_all ($RgE, $xml, $elements); $ReAttributes = '/(\w+)=(?:"|\')([^"\']*)(:?"|\')/'; $level = -1; foreach ($elements[1] as $ie => $xx) { if($fCdata) { if(substr($elements[0][$ie], strlen($elements[0][$ie])-3)==']]>') { $fCdata = false; $tmpary["text"] .= substr($elements[0][$ie],0, strlen($elements[0][$ie])-3); } else $tmpary["text"] .= $elements[0][$ie]; continue; } $refary = &$xmlary[$ie?count($xmlary)-1:0]; for($i=0;$i<$level;$i++) $refary = &$refary["elements"][count($refary["elements"])-1]; if(!$xx) { // start Tag $level++; if($ie>0) $refary = &$refary["elements"][count($refary["elements"])]; $refary["name"] = $elements[2][$ie]; if ( $attributes = trim($elements[3][$ie])) { preg_match_all ($ReAttributes, $attributes, $att); foreach ($att[1] as $ia => $xx) // all the attributes for current element are added here $refary["attributes"][$att[1][$ia]] = $att[2][$ia]; } // if $attributes if($elements[4][$ie]) //if content... $refary["text"] = $elements[4][$ie]; } else if($xx=='/') { // end Tag $level--; $refary["closetag"] = $elements[2][$ie]; } else { // $xx == '![CDATA[' $refary["text"] = substr($elements[0][$ie],9); $fCdata = true; } }//foreach return $xmlary; } ?> next one ---- Server IP: 66.163.161.117 Probable Submitter: 82.225.42.223 ---- X-Spam-Status: No, hits=3.1 required=5.0 tests=DATE_MISSING,FROM_NO_LOWER autolearn=no version=2.64 ---- Manual Page -- http://www.php.net/manual/en/ref.xml.php Edit -- http://master.php.net/note/edit/66182 Del: integrated -- http://master.php.net/note/delete/66182/integrated Del: useless -- http://master.php.net/note/delete/66182/useless Del: bad code -- http://master.php.net/note/delete/66182/bad+code Del: spam -- http://master.php.net/note/delete/66182/spam Del: non-english -- http://master.php.net/note/delete/66182/non-english Del: in docs -- http://master.php.net/note/delete/66182/in+docs Del: other reasons-- http://master.php.net/note/delete/66182 Reject -- http://master.php.net/note/reject/66182 Search -- http://master.php.net/manage/user-notes.php

« previous php.notes (#111400) next »