InnerHTML is not a standard, but it is more useful comparing to working with DOM with such functions as createElement and/or appendChild. But there is a problem with it: if you need further to handle the new added data (to refer new elements, to change/add their attributes), innerHTML is not good at all, as innerHTML simply visually adds new elements, but it does not really insert them in the DOM structure of the document. Attempting to do a document.getElementById() on a tag inside of code that was added using innerHTML just doesn't work. At least it didn't work for me in Firefox 3.
The folowing code can be accepted as the workaround.
var newDiv = document.createElement("div");
newDiv.innerHTML = xhr.responseText;
var container = document.getElementById("container");
container.parentNode.insertBefore(newDiv, container);
newDiv.parentNode.removeChild(container);
This way we get the same resulting document, but we can further work with DOM.