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