note 48111 modified in ref.dom by didou
| From: | didou@php.net | Date: | Sat, 02 Apr 2005 20:47:25 +0000 |
| Subject: | note 48111 modified in ref.dom by didou | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-87366@lists.php.net to get a copy of this message | ||
Here's a function to transform a DOMNode in an array.
greetings,
TIMO
<?
function dom_to_simple_array($domnode, &$array) {
$array_ptr = &$array;
$domnode = $domnode->firstChild;
while (!is_null($domnode)) {
if (! (trim($domnode->nodeValue) == "") ) {
switch ($domnode->nodeType) {
case XML_TEXT_NODE: {
$array_ptr['cdata'] = $domnode->nodeValue;
break;
}
case XML_ELEMENT_NODE: {
$array_ptr = &$array[$domnode->nodeName][];
if ($domnode->hasAttributes() ) {
foreach ($domnode->attributes as $d_attribute){
$array_ptr[$d_attribute->name] = $d_attribute->value;
}
}
break;
}
}
if ( $domnode->hasChildNodes() ) {
dom_to_simple_array($domnode, $array_ptr);
}
}
$domnode = $domnode->nextSibling;
}
}
?>
--was--
Unfortunately jas at uci dot edu 's function doesn'T really work ;-)
try this corrected version. It works even with complicated HTML..
greetings,
TIMO
<?
function dom_to_simple_array($domnode, &$array) {
$array_ptr = &$array;
$domnode = $domnode->firstChild;
while (!is_null($domnode)) {
if (! (trim($domnode->nodeValue) == "") ) {
switch ($domnode->nodeType) {
case XML_TEXT_NODE: {
$array_ptr['cdata'] = $domnode->nodeValue;
break;
}
case XML_ELEMENT_NODE: {
$array_ptr = &$array[$domnode->nodeName][];
if ($domnode->hasAttributes() ) {
foreach ($domnode->attributes as $d_attribute){
$array_ptr[$d_attribute->name] = $d_attribute->value;
}
}
break;
}
}
if ( $domnode->hasChildNodes() ) {
dom_to_simple_array($domnode, $array_ptr);
}
}
$domnode = $domnode->nextSibling;
}
}
?>
http://php.net/manual/en/ref.dom.php