Foros del Web » Programando para Internet » ASP Clásico »

Leer XML y usar algunos de los datos

Estas en el tema de Leer XML y usar algunos de los datos en el foro de ASP Clásico en Foros del Web. Hola a tod@s, tengo un problemilla y es que no me aclaro muy bien con esto del xml. Tengo una página que pasandole algunos parámetros, ...
  #1 (permalink)  
Antiguo 11/09/2007, 01:54
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 22 años, 4 meses
Puntos: 8
Leer XML y usar algunos de los datos

Hola a tod@s, tengo un problemilla y es que no me aclaro muy bien con esto del xml. Tengo una página que pasandole algunos parámetros, me genera un xml con el siguiente formato:

Cita:
<item>
<title>11.3.169.-CONGRESO EUROPEO DE SEGURIDAD Y SALUD EN EL TRABAJO (IV CONGRESO COMUNIDAD VALENCIANA)</title>
<link>http://loquesea.com/verdocumento.asp?IdDocumento=33966</link>
<pubdate>Fri, 03 Aug 2007 00:00:00 +0200</pubdate>
<author>Laura Juarez,</author>
<category>13</category>
</item>
<item>
<title>6.240.-TENDENCIAS 2006. DISEO EN EL SECTOR DEL MUEBLE.</title>
<link>http://loquesea.com/verdocumento.asp?IdDocumento=33961</link>
<pubdate>Wed, 01 Aug 2007 00:00:00 +0200</pubdate>
<author>Laura Juarez,</author>
<category>13</category>
</item>
<item>
<title>3.0.43.-PREPARACION DE LAS EMPRESAS USUARIAS INTERMEDIAS DE PRODUCTOS QUIMICOS PARA EL REACH.</title>
<link>http://loquesea.com/verdocumento.asp?IdDocumento=33959</link>
<pubdate>Wed, 01 Aug 2007 00:00:00 +0200</pubdate>
<author>Laura Juarez,</author>
<category>13</category>
</item>
Es algo como estó pero bastante más largo, claro. Y lo que quiero hacer es simplemente leer este xml y sacar por pantalla un listado de los títulos, y que estos títulos sean un link (cuyo valor sería el del campo link del xml, claro)

Supongo que debe ser sencillo, pero no acabo de lograrlo (llevo unos dias un poco espeso jeje) Muchas gracias por adelantado, salu2
__________________
Vayamos por Partes :: Jack el Destripador
  #2 (permalink)  
Antiguo 11/09/2007, 03:09
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 19 años, 3 meses
Puntos: 7
Re: Leer XML y usar algunos de los datos

Tendrias que poner cual es el nodo raiz. Algo asi:

Código:
<?xml version="1.0" encoding="UTF-8"?>
<noticias> <-------------------------------------------- nodo raiz
    <item>
            <title>TITULO</title>
           <link>ENLACE</link>
           <pubdate>FECHA</pubdate>
           <author>AUTOR</author>
           <category>CATEGORIA</category>
    </item>
</noticias> <------------------------------------------- final del nodo raiz
Aunque yo pondria la categoria como atributo del nodo item

<item category="13">
....
</item>

Para leer un archivo XML dispones de varios componentes. Generalmente el objeto que se usa para gestionar dichos archivos se llama XMLDOM o MSXML. Se llama con el CreateObject

set objXml = server.CreateObject("Microsoft.XMLDOM")
o
set objXml = server.CreateObject("MSXML2.DOMDocument")

donde MSXML2 puede ser MSXML3, MSXML4 o la version disponible.

Una vez instanciado, el objeto dispone de una serie de metodos y propiedades muy interesantes.

Aqui puedes verlos.

Voy a ponerte un ejemplo simple. Imagina que dispones de un archivo XML con los paises del mundo. Algo asi:

paises.xml
Código:
<?xml version="1.0" encoding="UTF-8" ?> 
<paises>
    <pais id="af">Afghanistan</pais>
    <pais id="ab">Albania</pais>
....

</paises>

Y queremos montar un combo box con los datos. Primero cargamos el archivo XML en el objeto

Código:
set objXml = server.CreateObject("MSXML2.DOMDocument")
objxml.async = false

' Aqui cargamos el archivo en el objeto
objxml.load(server.MapPath('paises.xml'))

' Gestion de errores
if objxml.parseError.errorCode <> 0 Then
        response.Write("Error de Lectura (Por favor, ponerse en contacto con el webmaster).<br />FilePos: " & objxml.parseError.filepos & "<br /> Línea: " & objxml.parseError.Line & "<br /> Causa: " & objxml.parseError.reason & "<br /> Ocurrió en: " & objxml.parseError.srcText & "<br /> Archivo: " & objxml.parseError.URL)
        response.End()
end if
Una vez pasada la criba de los errores, vayamos al proceso:

Código:
' Averiguamos cuantos paises tenemos
numPaises = objxml.selectSingleNode("/paises").childNodes.length

' Ahora montemos el combo box
response.write("<select id='paises' name='paises'>")
for n = 0 to numPaises-1
     response.write("<option value='" & objxml.selectSingleNode("/paises").childNodes(n).attributes(0).Value & "'>")
     response.write(objxml.selectSingleNode("/paises").childNodes(n).Text)
     response.write("</option>" & vbCrLf)
next

' cerramos el select
response.write("</select>" & vbCrLf)

' liberamos el objeto
set objxml = nothing

Como veras, es mas controlar donde estan los nodos que necesitas buscar (es algo muy parecido a los niveles de los movieclips en ActionScript). Fijate como me muevo por los childnodes.


Suerte!!


Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
  #3 (permalink)  
Antiguo 11/09/2007, 03:19
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 22 años, 4 meses
Puntos: 8
Re: Leer XML y usar algunos de los datos

Ok, el nodo raiz es <channel> y dentro ya están los items. Lo de la categoria no lo puedo cambiar, ya que no puedo tocar nada del código que genera el xml, tengo que trabajar con lo que hay :S (cosas que pasan cuando tienes que trabajar sobre algo que viene hecho de fuera) pero weno, eso no me preocupa, porque en principio solo necesitaré el título y el link
__________________
Vayamos por Partes :: Jack el Destripador
  #4 (permalink)  
Antiguo 11/09/2007, 03:40
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 19 años, 3 meses
Puntos: 7
Re: Leer XML y usar algunos de los datos

Pues entonces lo unico que tienes que hacer es retocar el ejemplo que te he dado.

numNoticias = objxml.selectSingleNode("/channel").childNodes.length

Y luego pasearte por la lista con un for ... next

for n = 0 to numNoticias -1
response.write(objxml.selectSingleNode("/channel").childNodes(n).childNodes(0).Text) <---- Titulo
response.write(objxml.selectSingleNode("/channel").childNodes(n).childNodes(1).Text) <---- Link
next



Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
  #5 (permalink)  
Antiguo 11/09/2007, 03:43
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 22 años, 4 meses
Puntos: 8
Re: Leer XML y usar algunos de los datos

De acuerdo, muchas gracias, lo probaré y trastearé un rato para familiarizarme con ello, y después ya solo me quedará insertarlo en las distintas secciones que necesito. Muchas gracias de nuevo, salu2
__________________
Vayamos por Partes :: Jack el Destripador
  #6 (permalink)  
Antiguo 11/09/2007, 04:09
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 22 años, 4 meses
Puntos: 8
Re: Leer XML y usar algunos de los datos

Me da el siguiente error:

Cita:
Error de Microsoft VBScript en tiempo de ejecución error '800a01a8'

Se requiere un objeto: 'server'

/prueba_xml.asp, línea 16
Supongo que es porque no tengo instalado en el servidor el componente set objXml = server.CreateObject("MSXML2.DOMDocument"), verdad?? Si es así, donde puedo descargarlo?? Muchas gracias, salu2
__________________
Vayamos por Partes :: Jack el Destripador
  #7 (permalink)  
Antiguo 11/09/2007, 04:14
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 22 años, 4 meses
Puntos: 8
Re: Leer XML y usar algunos de los datos

Vale, no era eso, culpa mia que me habia dejado unas comillas, pero ahora el error que da es otro:

Cita:
Error de Microsoft VBScript en tiempo de ejecución error '800a01a8'

Se requiere un objeto: 'objXml.selectSingleNode(...)'

/prueba_xml.asp, línea 25
Creo que es porque channel no es el nodo raiz, sino que debe ser rss. Dejo una muestra del código completo del xml, porque antes me he dejado trozos

Cita:
<?xml version="1.0" encoding="UTF-8" ?>

<rss version="2.0">
<channel>
<title>RSS de Gestor Conocimiento</title>
<description>Canal de RSS de los documentos dados de alta</description>
<item>
<title>11.3.169.-CONGRESO EUROPEO DE SEGURIDAD Y SALUD EN EL TRABAJO (IV CONGRESO COMUNIDAD VALENCIANA)</title>
<link>http://loquesea.com/verdocumento.asp?IdDocumento=33966</link>
<pubdate>Fri, 03 Aug 2007 00:00:00 +0200</pubdate>
<author>Laura Juarez,</author>
<category>13</category>
</item>
<item>
<title>6.240.-TENDENCIAS 2006. DISEO EN EL SECTOR DEL MUEBLE.</title>
<link>http://loquesea.com/verdocumento.asp?IdDocumento=33961</link>
<pubdate>Wed, 01 Aug 2007 00:00:00 +0200</pubdate>
<author>Laura Juarez,</author>
<category>13</category>
</item>
</channel>
</rss>
Asi que supongo que hay que acceder al nodo rss/channel, no?? Lo he puesto asi en el código, pero también me ha dado otro error. Dejo también como tengo el código de mómento
Código PHP:
<&#37;

set objXml server.CreateObject("MSXML2.DOMDocument")
objxml.async false

' Aqui cargamos el archivo en el objeto
objxml.load(server.MapPath("archivo.xml"))

Gestion de errores
if objxml.parseError.errorCode <> 0 Then
        response
.Write("Error de Lectura (Por favor, ponerse en contacto con el webmaster).<br />FilePos: " objxml.parseError.filepos "<br /> Línea: " objxml.parseError.Line "<br /> Causa: " objxml.parseError.reason "<br /> Ocurrió en: " objxml.parseError.srcText "<br /> Archivo: " objxml.parseError.URL)
        
response.End()
end if

' Averiguamos cuantos paises tenemos
numNoticias = objxml.selectSingleNode("/channel").childNodes.length


for n = 0 to numNoticias -1 
    response.write(objxml.selectSingleNode("/channel").childNodes(n).childNodes(0).Text)' 
<---- Titulo
    response
.write(objxml.selectSingleNode("/channel").childNodes(n).childNodes(1).Text)' <---- Link
next


liberamos el objeto
set objxml 
nothing
%> 
__________________
Vayamos por Partes :: Jack el Destripador

Última edición por angel_dope; 11/09/2007 a las 04:22
  #8 (permalink)  
Antiguo 11/09/2007, 04:31
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 22 años, 4 meses
Puntos: 8
Re: Leer XML y usar algunos de los datos

Ok, ya está todo resuelto y funcionando. Tenia que poner /rss/channel, y el for empezarlo a partir de 2, para que se saltase los dos primeros elementos del xml que no tienen link, y que tampoco quería sacar. Ahora ya solo me queda adaptar el formato etc etc y listo. Muchas gracias de nuevo, salu2
__________________
Vayamos por Partes :: Jack el Destripador

Última edición por angel_dope; 11/09/2007 a las 04:40 Razón: Problema Solucionado
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:49.