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

Busquedas sobre archivo XML

Estas en el tema de Busquedas sobre archivo XML en el foro de ASP Clásico en Foros del Web. Hola a todos, tengo que hacer unas búsquedas sobre un archivo XML que tiene la siguiente estructura: Código PHP: <?xml version = "1.0"  encoding = "utf-8" ...
  #1 (permalink)  
Antiguo 10/09/2008, 01:35
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 6 meses
Puntos: 8
Exclamación Busquedas sobre archivo XML

Hola a todos, tengo que hacer unas búsquedas sobre un archivo XML que tiene la siguiente estructura:

Código PHP:
<?xml version="1.0" encoding="utf-8"?>
<Integracion Fecha="16/06/2008 10:11:43" FechaInicial="01/01/2008" FechaFinal="16/06/2008" DescargaAnulados="True" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../xml/integracion.xsd">
<Alumnos Accion="Nuevos">
<Alumno NIF="00000000B" FechaAlta="18/06/2008" Nombre="Nuevo usuario" Apellidos="Nuevo usuario" Codigo="usuario" Password="f8032d5cae3de20fcec887f395ec9a6a" Titulacion="" FechaNacimiento="" Direccion="" Localidad="" Provincia="" CodigoPostal="0" Pais="ESPAÑA" Nacionalidad="ESPAÑA" Telefono="963258741" Fax="" Movil="60000000" CorreoElectronico="[email protected]" Habilitado="Sí" />
</Alumnos>
 <Alumnos Accion="Modificado">
<Alumno NIF="11111111R" FechaAlta="20/06/2007" FechaModificacion="18/06/2008" Nombre="Alumno1" Apellidos="Pruebas Adapting" Codigo="adaptingalumno1" Password="009371e6669d3c2485fb4dd08bfba5af" Titulacion="" FechaNacimiento="" Direccion="valencia" Localidad="valencia" Provincia="Valencia" CodigoPostal="46000" Pais="ESPAÑA" Nacionalidad="ESPAÑA" Telefono="9123121" Fax="789653222" Movil="912311" CorreoElectronico="[email protected]" Habilitado="Sí" />
<Alumno NIF="111111C" FechaAlta="30/11/1999" Nombre="AZULEJERA TÉCNICA" Apellidos=" S.A. (AZTECA)" Codigo="A12007472" Password="870158e5635fddf4ac29085f2351648d" Titulacion="" FechaNacimiento="30/11/1999" Direccion="CTRA. xxxxxxxx, KM. 19'7" Localidad="CASTELLÓN" Provincia="" CodigoPostal="12110" Pais="ESPAÑA" Nacionalidad="ESPAÑA" Telefono="xxxxxxx" Fax="" Movil="" CorreoElectronico="[email protected]" Habilitado="Sí" />
     </Alumnos>
 <Alumnos Accion="Borrados">
           <Alumno NIF="A22222222" Nombre="aaaaaaaa, S.A. " Apellidos="" FechaBorrado="18/06/2008" />
 </Alumnos>
<Cursos Accion="NuevosModificado">
  </Curso>
 </Cursos>
    <Matriculas Accion="matriculas">            
 </Matriculas>
</Integracion>
Hace tiempo trabajé con algo parecido y tenia el siguiente código para leer el archivo y sacar cuantos nodos habia y después recorrerlos:

Código PHP:
'Ahora leemos el xml creado en el paso anterior
set objXml = server.CreateObject("MSXML2.DOMDocument")
objxml.async = false

Aqui cargamos el archivo en el objeto
objxml
.load(server.MapPath("./tmp/"&Request.ServerVariables("Remote_Addr")&".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 cuantas noticias tenemos
numNoticias 
objxml.selectSingleNode("Integracion").childNodes.length
response
.write("<br><br>AQUI: " numnoticias
Donde en la linea "numNoticias = objxml.selectSingleNode("Integracion").childNodes. length" habia que ir poniendo la ruta de los nodos y subnodos con los que querías trabajar.

Pues bien, al trabajar con este fichero, si pongo simplemente el nodo Integración, si que me devuelve el número de subnodos que tengo (Alumnos, Cursos y Matricula), e incluso si pongo Integración\Alumnos también va bien, pero como tendría que hacerlo para acceder al nodo de alumnos especificando la acción?? Ya que puedo tener tres acciones diferentes (Nuevos, Modificados y Borrados), pero si pongo "numNoticias = objxml.selectSingleNode("Integracion\Alumnos Accion=Nuevos").childNodes.length" me da el siguiente error:
Cita:
msxml3.dll error '80004005'

Se esperaba el testigo 'eof' y se encontró 'NAME'. /Integracion/Alumnos -->Accion<--='Nuevos'

/gestion/prueba_xml2.asp, línea 18
Supongo que habrá que especificarle de alguna manera que solo quiero los que tengan ese atributo acción, pero no se como hacerlo. Muchas gracias por adelantado a tod@s, salu2
__________________
Vayamos por Partes :: Jack el Destripador
  #2 (permalink)  
Antiguo 10/09/2008, 01:52
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 6 meses
Puntos: 8
Respuesta: Busquedas sobre archivo XML

Bueno, ya he conseguido solucionar la primera parte del problema, para acceder a las diferentes acciones, hay que ponerlo de la siguiente manera:

Código PHP:
numNoticias objxml.selectSingleNode("/Integracion/Alumnos[@Accion='Nuevos']").childNodes.length 
Ahora el problema lo tengo al recorrer los resultados. Lo hago de la siguiente manera:

Código PHP:
for 0 to numNoticias 
    response
.write(objxml.selectSingleNode("/Integracion/Alumnos[@Accion='Nuevos']").childNodes(n).childNodes(0).Text)
next 
Pero me da el siguiente error:

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

Se requiere un objeto: '[object]'

/gestion/prueba_xml2.asp, línea 23
Alguien sabe a que se debe?? Muchas gracias de nuevo, salu2
__________________
Vayamos por Partes :: Jack el Destripador
  #3 (permalink)  
Antiguo 10/09/2008, 09:36
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Respuesta: Busquedas sobre archivo XML

Hola ¿puedes poner tu código?
El problema es en una llamada a un objeto que ya no existe o bien es inválida en el contexto.

Saludos
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #4 (permalink)  
Antiguo 11/09/2008, 00:13
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 6 meses
Puntos: 8
Respuesta: Busquedas sobre archivo XML

Hola u_goldman, el error lo da en esta linea:

Código PHP:
    response.write(objxml.selectSingleNode("/Integracion/Alumnos[@Accion='Nuevos']").childNodes(n).childNodes(0).Text
Pero te pongo el código completo por si acaso:

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

' Aqui cargamos el archivo en el objeto
objxml.load(server.MapPath("./tmp/"&Request.ServerVariables("Remote_Addr")&".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 cuantas noticias tenemos
numNoticias = objxml.selectSingleNode("/Integracion/Alumnos[@Accion='
Nuevos']").childNodes.length
Response.write("NUMERO: " & numnoticias)
 
 
for n = 0 to numNoticias 
    response.write("<br>")
    response.write(objxml.selectSingleNode("/Integracion/Alumnos[@Accion='
Nuevos]").childNodes(n).childNodes(0).Text)
next 
__________________
Vayamos por Partes :: Jack el Destripador
  #5 (permalink)  
Antiguo 11/09/2008, 01:30
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 6 meses
Puntos: 8
Respuesta: Busquedas sobre archivo XML

Vale, se donde está el error (creo) pero no se como resolverlo!! A ver, resulta que yo estoy poniendo response.write(objxml.selectSingleNode("/Integracion/Alumnos[@Accion='Nuevos']").childNodes(n).childNodes(0).Text) pero resulta, que sobra el último childNodes(0).text, puesto que los atributos del alumno no son nodos hijo de Alumno, sino que están dentro del propio nodo.

Asi que debería ser algo como response.write(objxml.selectSingleNode("/Integracion/Alumnos[@Accion='Nuevos']").childNodes(n).AtributoXXX(Text) pero no se como especificar eso exactamente, creo que con eso lo resolvería, no??
__________________
Vayamos por Partes :: Jack el Destripador
  #6 (permalink)  
Antiguo 11/09/2008, 03:36
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 6 meses
Puntos: 8
Respuesta: Busquedas sobre archivo XML

Ok, ya lo he encontrado también jeje por fin!!! Quedaría algo así:

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

' Aqui cargamos el archivo en el objeto
objxml.load(server.MapPath("./tmp/"&Request.ServerVariables("Remote_Addr")&".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 cuantas noticias tenemos
numNoticias = objxml.selectSingleNode("/Integracion/Alumnos[@Accion='
Nuevos']").childNodes.length
Response.write("NUMERO: " & numnoticias)
 
 
for n = 0 to numNoticias-1 
    response.write("<br>")
    Response.write(objxml.selectSingleNode("/Integracion/Alumnos[@Accion='
Nuevos]").childNodes(n).getAttribute("NIF"))
next 
__________________
Vayamos por Partes :: Jack el Destripador
  #7 (permalink)  
Antiguo 12/09/2008, 05:39
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 6 meses
Puntos: 8
Respuesta: Busquedas sobre archivo XML

Vale, ahora tengo un nuevo problema: resulta que el xml que yo consulto, se genera en ese mismo momento en función de unos parámetros que le paso, y claro, hay veces que algunas secciones salen y otras no. Lo malo es que cuando alguna de las secciones no sale y la consulto, me da error, como puedo evitarlo?? Os pongo un ejemplo, si pongo esto

Código PHP:
numNoticias_borrados objxml.selectSingleNode("/Integracion/Alumnos[@Accion='Borrados']").childNodes.length 
Pero no hay ningun alumno con esa acción, pues me da un error en esa linea y no me deja seguir. Como puedo controlar esto antes de consultar cuantos registros habría en esa sección?? Pensaba que si no habia nada, me devolveria 0 y ya está, pero no, me da error :S y claro, no es plan jeje

Muchas gracias por adelantado, salu2
__________________
Vayamos por Partes :: Jack el Destripador
  #8 (permalink)  
Antiguo 12/09/2008, 09:27
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Respuesta: Busquedas sobre archivo XML

Me parece que tendrás que hacerlo en dos pasos:

Código:
nodoNoticiasBorrados = objxml.selectSingleNode("/Integracion/Alumnos[@Accion='Borrados']")

if not is nothing nodoNoticiasBorrados then
   numNoticias_borrados = objxml.selectSingleNode("/Integracion/Alumnos[@Accion='Borrados']").childNodes.length  
else
    numNoticias_borrados = 0
end if
Aunque probablemente pare este momento ya lo resolviste
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #9 (permalink)  
Antiguo 16/09/2008, 04:33
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 6 meses
Puntos: 8
Respuesta: Busquedas sobre archivo XML

Hola u_goldman, la verdad es que aun no lo tenía, pero al usar esto me da un error de sintaxis en "if not is nothing", más concretamente, en el IS. Y si comento esa linea y lo ejecuto, me da el siguiente error:
Cita:
Error de Microsoft VBScript en tiempo de ejecución error '800a01b6'

El objeto no acepta esta propiedad o método: 'nodoNoticiasnuevos'

/gestion/prueba_xml2.asp, l�nea 28
Esa linea es la de nodoNoticiasBorrados = objxml.selectSingleNode("/Integracion/Alumnos[@Accion='Borrados']")
__________________
Vayamos por Partes :: Jack el Destripador
  #10 (permalink)  
Antiguo 16/09/2008, 08:02
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Respuesta: Busquedas sobre archivo XML

Woops, nunca me sale esta expresion, deberia ser asi:

Código asp:
Ver original
  1. if nodoNoticiasBorrados is not nothing  then
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #11 (permalink)  
Antiguo 16/09/2008, 09:16
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 6 meses
Puntos: 8
Respuesta: Busquedas sobre archivo XML

Ok, ahora ya no da el error de sintaxis, pero sigue dando el error que comento arriba, no deja asignar objxml.selectSingleNode("/Integracion/Alumnos[@Accion='Borrados']") a una variable :S
__________________
Vayamos por Partes :: Jack el Destripador
  #12 (permalink)  
Antiguo 16/09/2008, 11:07
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Respuesta: Busquedas sobre archivo XML

Mmmhhh, podrias poner tu XML?
El problema es que estamos evaluando mal entonces, la instrucción pregunta si no es nada, ese nodo, cuando realmente si es algo, es un nodo, solo que no tiene hijos, a lo mejor preguntando por el primero de esos hijos entonces si regresará un no es nada, por eso me gustaría ver el XML.

Saludos
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #13 (permalink)  
Antiguo 17/09/2008, 03:13
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 6 meses
Puntos: 8
Respuesta: Busquedas sobre archivo XML

La estructura del xml es la siguiente:

Código PHP:
<?xml version="1.0" encoding="utf-8"?> 
<Integracion Fecha="16/06/2008 10:11:43" FechaInicial="01/01/2008" FechaFinal="16/06/2008" DescargaAnulados="True" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../xml/integracion.xsd"> 
<Alumnos Accion="Nuevos"> 
<Alumno NIF="00000000B" FechaAlta="18/06/2008" Nombre="Nuevo usuario" Apellidos="Nuevo usuario" Codigo="usuario" Password="f8032d5cae3de20fcec887f395ec9a6a" Titulacion="" FechaNacimiento="" Direccion="" Localidad="" Provincia="" CodigoPostal="0" Pais="ESPAÑA" Nacionalidad="ESPAÑA" Telefono="963258741" Fax="" Movil="60000000" CorreoElectronico="[email protected]" Habilitado="Sí" /> 
</Alumnos> 
 <Alumnos Accion="Modificado"> 
<Alumno NIF="11111111R" FechaAlta="20/06/2007" FechaModificacion="18/06/2008" Nombre="Alumno1" Apellidos="Pruebas Adapting" Codigo="adaptingalumno1" Password="009371e6669d3c2485fb4dd08bfba5af" Titulacion="" FechaNacimiento="" Direccion="valencia" Localidad="valencia" Provincia="Valencia" CodigoPostal="46000" Pais="ESPAÑA" Nacionalidad="ESPAÑA" Telefono="9123121" Fax="789653222" Movil="912311" CorreoElectronico="[email protected]" Habilitado="Sí" /> 
<Alumno NIF="111111C" FechaAlta="30/11/1999" Nombre="AZULEJERA TÉCNICA" Apellidos=" S.A. (AZTECA)" Codigo="A12007472" Password="870158e5635fddf4ac29085f2351648d" Titulacion="" FechaNacimiento="30/11/1999" Direccion="CTRA. xxxxxxxx, KM. 19'7" Localidad="CASTELLÓN" Provincia="" CodigoPostal="12110" Pais="ESPAÑA" Nacionalidad="ESPAÑA" Telefono="xxxxxxx" Fax="" Movil="" CorreoElectronico="[email protected]" Habilitado="Sí" /> 
     </Alumnos> 
 <Alumnos Accion="Borrados"> 
           <Alumno NIF="A22222222" Nombre="aaaaaaaa, S.A. " Apellidos="" FechaBorrado="18/06/2008" /> 
 </Alumnos> 
<Cursos Accion="NuevosModificado"> 
  </Curso> 
 </Cursos> 
    <Matriculas Accion="matriculas">             
 </Matriculas> 
</Integracion>
La cosa está en que cada apartado puede estar o no, ya que se crea de forma dinámica pasándole una fecha de inicio y fin. Puede que entre esas dos fechas no haya ningun alumno con la acción BORRADO o NUEVO, por lo que en ese caso, ni siquiera aparecería en el xml, y eso es lo que quiero controlar.
__________________
Vayamos por Partes :: Jack el Destripador
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:50.