Ver Mensaje Individual
  #8 (permalink)  
Antiguo 26/02/2008, 21:56
Avatar de Panino5001
Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Re: duda con Javascript y XML

En realidad te sugería el uso de AJAX para crear el intérprete xml, pero ya que usás XML DOM, te pongo un ejemplo con esa misma técnica:
El xml
Código PHP:
<?xml version="1.0" standalone="yes"?><rss version="2.0">
<channel><title>- Noticias</title><link>#</link><description>Noticias de interes</description>
<noticias>
<noticia>
<fecha>19/02/2008</fecha>
<titulo>Aqui va el titulo de la noticia que lo habras visto en la imagen</titulo>
<description>Aqui va una descripcion de la noticia, que eso es lo que estas viendo en la imagen que puse anteriormente</description>
<mensaje>
Aqui va la noticia completa que quiero mostrar
</mensaje>
<link>#</link>
<image>../noticiasxml/idac1.jpg</image>
</noticia>
<noticia>
<fecha>19/02/2008</fecha>
<titulo>Otra noticia</titulo>
<description>La síntesis de la otra noticia</description>
<mensaje>
Aqui va la noticia completa que quiero mostrar
</mensaje>
<link>#</link>
<image>../noticiasxml/idac1.jpg</image>
</noticia>
</noticias>
</channel>
</rss>
El intérprete:
Código PHP:
<!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>
<
meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<
title>test</title>
<
script>
function 
Replace(totalValue,oldValue,newValue)
{
while(
totalValue.indexOf(oldValue) > -1)
totalValue=totalValue.replace(oldValue,newValue);
return 
totalValue;
}

/* Aqui Traigo los Nodos del XML
(Parametros) TagNames:'XML Elemento' nodo:'Numero de fila de elemento' */

function getNode(TagNamenode)
{
var 
currentNode = (node == null) ? xmlDoc.getElementsByTagName(TagName) :
items[node].getElementsByTagName(TagName);
if(
currentNode.length 0)
return 
currentNode[0].firstChild.nodeValue;
}
/* Cargando documento XML
(Parametros) rssFeed:'Archivo RSS' Body:'Layer para el cuerpo rss' Titulo:'Layer para el titulo rss' */

function ReadRSS(rssFeedBodyTitle)
{
rssTitle document.getElementById(Title);
rssBody document.getElementById(Body);

try
{
if (
document.all)
{
var 
errorHappendHere "Check Browser and security settings";
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
}
else
{
var 
errorHappendHere "Aparentemente no se puede leer remotamente el xml via firefox, copiar el archivo en el servidor";
xmlDoc document.implementation.createDocument("","",null) ;
}

xmlDoc.async=false;
xmlDoc.load(rssFeed);

items=xmlDoc.getElementsByTagName('noticia');
SetRSSTemplates();
}

catch(
e)
{
rssTitle.innerHTML 'Error occured';
rssBody.innerHTML 'Thrown Error:'+e.message+"<br/>Note: "+errorHappendHere;
}
}

/* setiando el template de html */

function SetRSSTemplates()
{
if (
rssBody)
{
var 
buffer "";
for(var 
i=0iitems.lengthi++)
{
if (
document.all)
{
var 
output Replace(rssBody.innerHTML,"(::Link::)","javascript:mostrar('"+getNode('titulo',i)+"','"+getNode('image',i)+"','"+getNode('mensaje',i)+"')");
}
else
{
var 
output Replace(rssBody.innerHTML,"%28::Link::%29","javascript:mostrar('"+getNode('titulo',i)+"','"+getNode('image',i)+"','"+getNode('mensaje',i)+"')");
}
output Replace(output,"(::Title::)",getNode('titulo',i));
output Replace(output,"(::Pubdate::)",getNode('fecha',i)) ;
output Replace(output,"(::Description::)",getNode('description',i));
buffer+=output;
}
rssBody.innerHTML buffer;
}

if (
rssTitle)
{
var 
output Replace(rssTitle.innerHTML,"(::Title::)",getNode('title'));
output Replace(output,"(::Description::)",getNode('description'));
rssTitle.innerHTML output;
}
}
function 
mostrar(titulo,imagen,nota){
var 
v=window.open('');
v.document.open();
v.document.write('<html><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>'+titulo+'</title></head><body><h1>'+titulo+'</h1><p align="left"><img src="'+imagen+'" width="100" hspace="5" vspace="5" align="left" />'+nota+'</p></body></html>');
v.document.close();
}

window.onload = function()
{
ReadRSS('noticias.xml','rssBodyTemplate','rssTitleTemplate');

}
</script>
</head>

<body>
<div id="rssTitleTemplate">
<div align="left">(::Title::)<br/>

</div>
<h1 align="left">(::Description::)</h1> </div>
<div id="rssBodyTemplate">
<div align="left"><a href="(::Link::)"><b>(::Title::)</b></a>
<b>(::Pubdate::)</b>
<br/>
<font size="-1">(::Description::)</font>

</div>
<hr noshade="noshade"/>
<br/>
</div>
</body>
</html> 
Finalmente, el diseño de la vista completa podrás modificarlo cambiando la función mostrar.