На мой взгляд, ты излишне усложняешь жизнь - если не требуется жуткого интерактива на странице, без ее перезагрузки, выполнять трансформацию xml -> html через xslt лучше всего на сервере. Клиенту в этом случае приходит чистый html-код, скрывающий реализацию. Пример на c#:

Код:
protected String getXMLTransformResult() {
XmlDocument doc = new XmlDocument();
XmlDocument result = new XmlDocument();
XmlNode node = result.AppendChild(result.CreateElement("root"));
XmlDocument stylesheet = new XmlDocument();
XslTransform transform = new XslTransform();
XsltArgumentList arguments = new XsltArgumentList();
fillXsltArgumentList(ref arguments);
doc.Load(Server.MapPath(@"data/properties.xml"));
stylesheet.Load(Server.MapPath(@"data/properties.xsl"));
transform.Load(stylesheet);
XmlReader reader = transform.Transform(doc, arguments);
for (reader.Read(); !reader.EOF; )
node.AppendChild(result.ImportNode(doc.ReadNode(reader), true));
reader.Close();
return node.InnerXml;
}
Аналогично делается на java, php етс.
Естественно, xml не обязательно грузить с диска

Если же ты маньяк и все трансформации позарез надо делать на клиенте, вот пример из MSDN:

Код:
<SCRIPT LANGUAGE="JScript">
var oMenuXml = new ActiveXObject("Microsoft.XMLDOM");
oMenuXml.async = false;
oMenuXml.load("webdev.xml");
var oMenuXsl = new ActiveXObject("Microsoft.XMLDOM");
oMenuXsl.async = false;
oMenuXsl.load("menus_1.xsl");
</SCRIPT>
</HEAD>
<BODY>
<SCRIPT LANGUAGE="JScript">
document.write(oMenuXml.transformNode(oMenuXsl.documentElement));
</SCRIPT>