Hi, Friday, July 11, 2003, 4:30:41 AM, you wrote: MG> Well I've made a signifigant improvement to this function, and it's now the MG> parsing operation is only something like 26 lines. It works flawlessly (so MG> far) for XML that does not have repeat element names on the same level. MG> Which seems to be bad form anyway, using similar element names and MG> distinguishing them with attributes.
MG> I'd still like the code to work with XML that did have similarly named MG> elements in the same node level.. can you see anything in my DOMXML calls MG> that might indicate the problem? I rearranged the way you did your parsing and came up with this: function parseBranch($branch, &$doc, &$parent) { static $elements = array(); foreach ($branch as $key => $val) { switch ($key) { // parent attributes case ('ATTRIBUTES'): foreach ($val as $attrName => $attrVal) { switch ($attrName){ case 'VALUE': $nodeValue = $doc->create_text_node($attrVal); $parentValue = $parent->append_child($nodeValue); break; default: $parent->set_attribute($attrName, $attrVal); break; } } break; // parent value case ('VALUE'): $nodeValue = $doc->create_text_node($val); $parentValue = $parent->append_child($nodeValue); break; default: // add child element if(!isset($elements[$key])){ $elements[$key] = $doc->create_element($key); } // parse children of this node foreach ($val as $children) { //create node $child = $parent->append_child($elements[$key]->clone_node()); //set its elements parseBranch($children, $doc, $child); } break; } } } which gives <?xml version="1.0"?> <ROOTELEMENT ID="1"> <RECORD ID="1">Value 1</RECORD> <RECORD ID="2">Value 2</RECORD> </ROOTELEMENT> -- regards, Tom -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php