De hecho, Viet, si la tengo y parte de la misma funcionalidad expuesta anteriormente pero con algunos pequeños cambios.
 
Vamos a sustituir la función 
var jsData = new Array( );  por la rutina AJAX de tu preferencia que devuelva el XML con esta estructura:  
 Código PHP:
    <xml id="msxml" style="display:none">
<worldcup>
<final>
<location>Uruguay</location>
<year>1930</year>
<winner>Uruguay</winner>
<winscore>4</winscore>
<loser>Argentina</loser>
<losscore>2</losscore>
</final>
<final>
<location>Italia</location>
<year>1934</year>
<winner>Italy</winner>
<winscore>2</winscore>
<loser>Czechoslovakia</loser>
<losscore>1</losscore>
</final>
</worldcup>
</xml> 
    
  Esta rutina deve devolver un objeto llamado 
xDoc 
Posteriormente vamos a modficar la función 
 drawTable(tbody)  por lo siguiente:    
 Código PHP:
    function drawTable(tbody) {
var tr, td, i, j, oneRecord;
tbody = document.getElementById(tbody);
// nodos del arbol xml
var data = xDoc.getElementsByTagName("worldcup")[0];
// esto es para cuestiones de css del TD, no lo uso
//var classes = ["ctr","","","","ctr"];
for (i = 0; i < data.childNodes.length; i++) {
//IMPORTANTE, brincarse este nivel para Netscape, aún investigo por que
    if (data.childNodes[i].nodeType == 1) {
       // nuestro registro
        oneRecord = data.childNodes[i];
        tr = tbody.insertRow(tbody.rows.length);
        td = tr.insertCell(tr.cells.length);
        //td.setAttribute("class",classes[tr.cells.length-1]);
        td.innerHTML =oneRecord.getElementsByTagName("year")[0].firstChild.nodeValue;
        td = tr.insertCell(tr.cells.length);
        //td.setAttribute("class",classes[tr.cells.length-1]);
        td.innerHTML =oneRecord.getElementsByTagName("location")[0].firstChild.nodeValue;
        td = tr.insertCell(tr.cells.length);
        //td.setAttribute("class",classes[tr.cells.length-1]);
        td.innerHTML =
        oneRecord.getElementsByTagName("winner")[0].firstChild.nodeValue;
        td = tr.insertCell(tr.cells.length);
        //td.setAttribute("class",classes[tr.cells.length-1]);
        td.innerHTML =
        oneRecord.getElementsByTagName("loser")[0].firstChild.nodeValue;
        td = tr.insertCell(tr.cells.length);
        //td.setAttribute("class",classes[tr.cells.length-1]);
        td.innerHTML =oneRecord.getElementsByTagName("winscore")[0].firstChild.nodeValue +" - " + oneRecord.getElementsByTagName("losscore")[0].firstChild.nodeValue;
    }
}
} 
    
  Este es otro ejemplo por eso hablo de la copa mundial.  
Y la ejecución con el evento body:
drawTable('matchData') 
Y listo. 
Precisamente este tutorial lo estoy armando en mi site. 
La primera parte aqui :
http://www.fuenteria.com/?external=35  www.fuenteria.com hecho con