<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<script type="text/javascript">
//
var sample_convert_table = {
    nmap: { 
        "listitems": 'UL',
        "listitem":  'LI',
        "href":      'A'
    },
    ntxt: {
        "name": 1
    },
    kmap: {
        "listitem": function( x ) { return [x.childNodes[1]]; },
        "href":     function( x ) { return [x.previousSibling]; }
    },
    amap: {
        "href": "HREF"
    }
};

function convertSubTree(src,table) {

   var name = src.nodeName;
   var res = undefined;
   var kidlist = src.childNodes;

   if (table.ntxt[name]) {
       return document.createTextNode(kidlist[0].nodeValue);
   }

   if (table.nmap[name]) { 
        res = document.createElement(table.nmap[name]);
   }

   if (res &amp;&amp; table.amap[name]) {
       res.setAttribute(table.amap[name], kidlist[0].nodeValue);
   }

   if (table.kmap[name]) { 
	kidlist = table.kmap[name](src); 
	kidlist = kidlist;
   }

   var i;
   for (i = 0; i &lt; kidlist.length; i++ ) {
        var converted = convertSubTree(kidlist[i], table);
        if (res &amp;&amp; converted) {
	    alert("appending " + converted.nodeName + " to " + res.nodeName);
	    res.appendChild(converted);
        }
	if (!res &amp;&amp; converted) { res = converted; }
   }
   return res;
}

function testconvert() {
   var src = document.getElementById('srcdiv');
   var dst = document.getElementById('dstdiv');
   var e = convertSubTree(src, sample_convert_table);
   e = e;
   dst.appendChild(e);
}

//
</script>
<title></title>
</head>
<body onload="testconvert()">
Testing page, converting:
<div id="srcdiv"><listitems>
     <listitem><name>link1</name><href>http://www.fnal.gov/</href>
     </listitem>
     <listitem><name>link2</name><href>http://www-css.fnal.gov/</href>
     </listitem>
   </listitems></div>
<div id="dstdiv"></div>
</body>
</html>
