Hola monoswim
Tienes dos opciones para cargar un documento xml sin utilizar Ajax, al menos que yo conozca, con un string almacenado en una variable o cargando un documento xml.
Te pongo las dos:
Desde un string:
Código:
<div id="no" style="position: absolute; left: 30px; top: 10px; width: 200px; height: 150px; background-color: yellow;"></div>
<script language="JavaScript">
<!--
// corrige un error, gecko y opera interpreta como nodo de texto los espacios en blanco
function get_child_nodes(el){
var elem = el;
for (var ctrds = 0; ctrds < elem.childNodes.length; ctrds++){
if ((elem.childNodes[ctrds].nodeType == 3) && (!(/\S/).test(elem.childNodes[ctrds].nodeValue))) {
// Esta condicional se cumple si es un nodo de Texto en Blanco
elem.removeChild(elem.childNodes[ctrds]);
ctrds--;
}
}
return elem.childNodes;
}
function xml_from_string(xml_string){
var xmlDoc = null;
// IE
if (window.ActiveXObject){
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = false;
xmlDoc.loadXML(xml_string);
}
//apartir de Opera 8, y alguna de las ultimas versiones de Opera 7
else if(document.implementation.createLSParser) {
var lsp = document.implementation.createLSParser(1, null);
var lsi = document.implementation.createLSInput();
lsi.stringData = xml_string;
xmlDoc = lsp.parse(lsi);
}
// gecko
else if (document.implementation && document.implementation.createDocument) {
var parser = new DOMParser();
xmlDoc = parser.parseFromString(xml_string, "text/xml");
}
else{
alert("No soporta XMLDOM");
}
return xmlDoc;
}
function xml_caca(){
var msgcc = get_child_nodes(xmlCaca.getElementsByTagName("caca")[0]);
var str = "";
for(var ctr = 0; ctr < msgcc.length; ctr++){
str+= msgcc[ctr].firstChild.nodeValue + "<br>";
}
document.getElementById("no").innerHTML = str;
}
// creamos el objecto xml
var arb = '<?xml version="1.0" encoding="iso-8859-1"?><caca><teta>teta</teta><cola>cola </cola><teta>teta2</teta></caca>';
var xmlCaca = xml_from_string(arb);
xml_caca()
//-->
</script>
Y la otra opcion es cargando el documento xml
Código:
<div id="no" style="position: absolute; left: 30px; top: 10px; width: 200px; height: 150px; background-color: yellow;"></div>
<script language="JavaScript">
<!--
// corrige un error, gecko y opera interpreta como nodo de texto los espacios en blanco
function get_child_nodes(el){
var elem = el;
for (var ctrds = 0; ctrds < elem.childNodes.length; ctrds++){
if ((elem.childNodes[ctrds].nodeType == 3) && (!(/\S/).test(elem.childNodes[ctrds].nodeValue))) {
// Esta condicional se cumple si es un nodo de Texto en Blanco
elem.removeChild(elem.childNodes[ctrds]);
ctrds--;
}
}
return elem.childNodes;
}
function load_xml(uri){
var xmlDoc = null;
// IE
if (window.ActiveXObject){
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = false;
xmlDoc.load(uri);
}
//apartir de Opera 8, y alguna de las ultimas versiones de Opera 7
else if(document.implementation.createLSParser) {
var ls = document.implementation.createLSParser(1, null);
xmlDoc=ls.parseURI(uri);
}
// gecko
else if (document.implementation && document.implementation.createDocument) {
var xmlDoc= document.implementation.createDocument("","doc",null);
xmlDoc.load(uri);
}
else{
alert("No soporta XMLDOM");
}
return xmlDoc;
}
function xml_caca(){
var msgcc = get_child_nodes(xmlCaca.getElementsByTagName("caca")[0]);
var str = "";
for(var ctr = 0; ctr < msgcc.length; ctr++){
str+= msgcc[ctr].firstChild.nodeValue + "<br>";
}
document.getElementById("no").innerHTML = str;
}
// cargamos de documento xml
var xmlCaca = load_xml("caca.xml");
// Con Internet Explorer y Opera, simplemente llamar ejecutar metodo
if (window.ActiveXObject || window.opera) xml_caca();
//en Gecko, ejecutar función una vez cargado el Objeto (Documento XML)
else xmlCaca.onload = function(){xml_caca()};
//-->
</script>
Soportado por IE 5.5+, Gecko, creo que Netscape 7 ya soportaba estos métodos, y Opera 8.
No lo he probado en Konqueror y Safari, pero creo que también los soportan.
Espero que te sea útil.
Un saludo