note 66182 added to ref.xml
| From: | n15 at free dot fr | 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