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

[SOLUCIONADO] Leer XML de forma remota

Estas en el tema de Leer XML de forma remota en el foro de ASP Clásico en Foros del Web. Hola, tengo el siguiente problema. Quiero leer un xml y extraer cierta información para mostrarla por pantalla. Si tengo el xml en local, no hay ...
  #1 (permalink)  
Antiguo 09/09/2014, 02:25
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 4 meses
Puntos: 8
Leer XML de forma remota

Hola, tengo el siguiente problema. Quiero leer un xml y extraer cierta información para mostrarla por pantalla. Si tengo el xml en local, no hay problema, lo tengo ya todo hecho, pero en este caso, el xml está en otro servidor, teniendo que acceder a través de una url del tipo http://www.dominio.com/temas/categoria/feed/.
He conseguido leer el xml con este código

Código ASP:
Ver original
  1. Set objSrvHTTP = Server.CreateObject("MSXML2.ServerXMLHTTP.4.0")
  2.     objSrvHTTP.open "GET", " http://www.dominio.com/temas/categoria/feed/", false
  3.    
  4.     objSrvHTTP.send()
  5.     Feed = objSrvHTTP.ResponseText

Pero no se después como pasarle esa información al código que ya tengo que es el siguiente:

Código ASP:
Ver original
  1. set objXml = server.CreateObject("MSXML2.DOMDocument")
  2. objxml.async = false
  3.  
  4. ' Aqui cargamos el archivo en el objeto
  5. objxml.load(server.mappath("./tmp/xml_wm.xml"))
  6.  
  7. ' Gestion de errores
  8. if objxml.parseError.errorCode <> 0 Then
  9.         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)
  10.         response.End()
  11. end if
  12. numNoticias = objxml.selectSingleNode("/rss/channel").childNodes.length
  13. if numNoticias <= 5 then
  14.     numnoticias = 0
  15. else
  16.     for n = 9 to 13
  17.         i=0
  18.         j=0
  19.         while j=0
  20.             if objxml.selectSingleNode("/rss/channel").childNodes(n).childNodes(i).tagname = "title" then
  21.                 response.write "titulo = " & objxml.selectSingleNode("/rss/channel").childNodes(n).childNodes(i).text
  22.                 j=1
  23.             end if
  24.             i=i+1
  25.         wend
  26.         i=0
  27.         j=0
  28.         while not j<>0
  29.             if objxml.selectSingleNode("/rss/channel").childNodes(n).childNodes(i).tagname = "link" then
  30.                 response.write "<br>enlace = " & objxml.selectSingleNode("/rss/channel").childNodes(n).childNodes(i).text
  31.                 j=1
  32.             end if
  33.             i=i+1
  34.         wend
  35.         i=0
  36.         j=0
  37.         while not j<>0
  38.             if objxml.selectSingleNode("/rss/channel").childNodes(n).childNodes(i).tagname = "description" then
  39.                 response.write "<br>Resumen = " & objxml.selectSingleNode("/rss/channel").childNodes(n).childNodes(i).text
  40.                 j=1
  41.             end if
  42.             i=i+1
  43.         wend
  44.         i=0
  45.         j=0
  46.         while not j<>0
  47.             if objxml.selectSingleNode("/rss/channel").childNodes(n).childNodes(i).tagname = "content:encoded" then
  48.                 response.write "<br><br>Total = " & objxml.selectSingleNode("/rss/channel").childNodes(n).childNodes(i).text
  49.                 j=1
  50.             end if
  51.             i=i+1
  52.         wend
  53.         response.write "<br><br>"
  54.     next
  55. end if

He intentado también guardar el contenido de la variable feed en un archivo y guardarlo de forma temporal, pero si intento acceder a ese archivo después, me da un error por caracteres desconocidos.

Alguna idea de por donde tengo que tirar?

Salu2
__________________
Vayamos por Partes :: Jack el Destripador
  #2 (permalink)  
Antiguo 09/09/2014, 03:43
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 4 meses
Puntos: 8
Respuesta: Leer XML de forma remota

Cuando guardo el xml que leo como archivo de texto y después intento leerlo, me el siguiente error

Cita:
Error de Lectura (Por favor, ponerse en contacto con el webmaster).
FilePos: 414
Línea: 4
Causa: Se encontró un carácter no válido en el contenido del texto.
Ocurrió en:
He intentado también cambiar el Feed = objSrvHTTP.ResponseText por Feed = objSrvHTTP.responseXML.xml y da el mismo error, aunque en otra linea diferente. En el caso de usar el responseXML.xml, si lo comparo el archivo que genero, con el que me he guardado directamente desde el navegador accediendo al feed, es que el que genero yo parece que está bien formateado, con saltos de linea y todo, y en el que me descargo, sale todo en plan "chorizo".
Sin embargo, si uso el Feed = objSrvHTTP.ResponseText los archivos son exactamente igual, no veo ninguna diferencia y aun así da el mismo error. La verdad es que ya no se que más hacer, a ver si alguien me puede orientar un poco.

Salu2
__________________
Vayamos por Partes :: Jack el Destripador

Última edición por angel_dope; 09/09/2014 a las 03:53 Razón: Añadir información
  #3 (permalink)  
Antiguo 09/09/2014, 04:22
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 4 meses
Puntos: 8
Respuesta: Leer XML de forma remota

Pues otra cosa más solucionada. El tema está en que al crear el archivo con fso lo crea con tipo ANSI y no como UTF-8, por lo tanto hay que hacerlo con ADODB.Stream. De esta forma lo guarda con formato UTF-8 y después no da problemas a la hora de leerlo.
Dejo el código para quien lo pueda necesitar:

Código ASP:
Ver original
  1. <%
  2. Set objSrvHTTP = Server.CreateObject("MSXML2.ServerXMLHTTP.4.0")
  3. objSrvHTTP.open "GET", "http://www.dominio/temas/categoria/feed/", false
  4. objSrvHTTP.send()
  5. Feed = objSrvHTTP.responseXML.xml
  6.  
  7. const adTypeBinary = 1
  8. const adSaveCreateOverwrite = 2
  9. const adModeReadWrite = 3
  10.  
  11. Set objStream = server.CreateObject("ADODB.Stream")
  12. objStream.Open
  13. objStream.CharSet = "UTF-8"
  14. objStream.WriteText(feed)
  15.  
  16. objStream.SaveToFile server.mappath("./tmp/")& "/xml_wm2.xml" , adSaveCreateOverWrite
  17. objStream.Close
  18.  
  19. set objXml = server.CreateObject("MSXML2.DOMDocument")
  20. objxml.async = false
  21.  
  22. objxml.load(server.mappath("./tmp/xml_wm2.xml"))
  23.  
  24. ' Gestion de errores
  25. if objxml.parseError.errorCode <> 0 Then
  26.         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)
  27.         response.End()
  28. end if
  29.  
  30. numNoticias = objxml.selectSingleNode("/rss/channel").childNodes.length
  31. if numNoticias <= 5 then
  32.     numnoticias = 0
  33. else
  34.     for n = 9 to 13
  35.         i=0
  36.         j=0
  37.         while j=0
  38.             if objxml.selectSingleNode("/rss/channel").childNodes(n).childNodes(i).tagname = "title" then
  39.                 response.write "titulo = " & objxml.selectSingleNode("/rss/channel").childNodes(n).childNodes(i).text
  40.                 j=1
  41.             end if
  42.             i=i+1
  43.         wend
  44.         i=0
  45.         j=0
  46.         while not j<>0
  47.             if objxml.selectSingleNode("/rss/channel").childNodes(n).childNodes(i).tagname = "link" then
  48.                 response.write "<br>enlace = " & objxml.selectSingleNode("/rss/channel").childNodes(n).childNodes(i).text
  49.                 j=1
  50.             end if
  51.             i=i+1
  52.         wend
  53.         i=0
  54.         j=0
  55.         while not j<>0
  56.             if objxml.selectSingleNode("/rss/channel").childNodes(n).childNodes(i).tagname = "description" then
  57.                 response.write "<br>Resumen = " & objxml.selectSingleNode("/rss/channel").childNodes(n).childNodes(i).text
  58.                 j=1
  59.             end if
  60.             i=i+1
  61.         wend
  62.         i=0
  63.         j=0
  64.         while not j<>0
  65.             if objxml.selectSingleNode("/rss/channel").childNodes(n).childNodes(i).tagname = "content:encoded" then
  66.                 response.write "<br><br>Total = " & objxml.selectSingleNode("/rss/channel").childNodes(n).childNodes(i).text
  67.                 j=1
  68.             end if
  69.             i=i+1
  70.         wend
  71.         response.write "<br><br>"
  72.     next
  73. end if
  74. %>
__________________
Vayamos por Partes :: Jack el Destripador

Etiquetas: remoto, xml
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 11:11.