Foros del Web » Programando para Internet » PHP »

simplexml_load_file

Estas en el tema de simplexml_load_file en el foro de PHP en Foros del Web. Mi host tiene php 4.4.8 , y no tiene las funciones de manejo de archivos xml que creo estan disponibles desde php 5, como "simplexml_load_file" ...
  #1 (permalink)  
Antiguo 22/02/2008, 10:10
 
Fecha de Ingreso: junio-2006
Mensajes: 46
Antigüedad: 17 años, 9 meses
Puntos: 0
simplexml_load_file

Mi host tiene php 4.4.8 , y no tiene las funciones de manejo de archivos xml que creo estan disponibles desde php 5, como "simplexml_load_file" y otras similares.

Hay alguna clase donde esten definidas estas funciones para poder usarlas en mi host aunque no este actualizado a la version 5?

Si las hubiese seria fantastico. Os agradeceria informacion al respecto.

Un saludo
  #2 (permalink)  
Antiguo 22/02/2008, 10:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: simplexml_load_file

SimpleXML no existe en PHP4, por lo que tu única forma de leer XML es usando DOMXML, o la extensión de XML de PHP.

Para mayor información te invito a que leas el Manual de PHP.

Saludos.
  #3 (permalink)  
Antiguo 22/02/2008, 11:45
 
Fecha de Ingreso: junio-2006
Mensajes: 46
Antigüedad: 17 años, 9 meses
Puntos: 0
Re: simplexml_load_file

Gracias GatorV,

Abusando de tu amabilidad te hago otra pregunta...

en este codigo:

Código:
<prueba>
<name>prueba</name>
<url>url</url>
<apartado1:sitio id="565" listo="True" descativado="False">
<apartado1:nombre>nombre</apartado1:nombre>
</apartado1:sitio>
</prueba>
Extraigo sin dificultad name con:

$name = $xml->prueba->name;

Como deberia llamar el dato de las etiquetas <apartado1:nombre>?? He tanteado con $xml->prueba->apartado1:sitio->apartado1:nombre y no va, claro.

Tambien me gustaria saber si es posible extraer los atributos de apartado1:sitio.

Gracias de antemano.
  #4 (permalink)  
Antiguo 22/02/2008, 11:58
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: simplexml_load_file

Prueba así:
Código PHP:
$xml->prueba->{'apartado1:sitio'}->{'apartado1:nombre'}; 
Saludos.
  #5 (permalink)  
Antiguo 22/02/2008, 12:06
 
Fecha de Ingreso: junio-2006
Mensajes: 46
Antigüedad: 17 años, 9 meses
Puntos: 0
No, asi no va... NO da fallo pero no devuelve nada.

Alguien tiene alguna otra idea?

Gracias de antemano!

Última edición por GatorV; 22/02/2008 a las 13:45
  #6 (permalink)  
Antiguo 22/02/2008, 13:44
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: simplexml_load_file

Prueba la solución de este POST: http://www.forosdelweb.com/f68/duda-simplexml-559577/

Saludos.
  #7 (permalink)  
Antiguo 22/02/2008, 14:04
 
Fecha de Ingreso: junio-2006
Mensajes: 46
Antigüedad: 17 años, 9 meses
Puntos: 0
Re: simplexml_load_file

Cita:
Iniciado por GatorV Ver Mensaje
Mmm leyendo mas a fondo prueba esto:
Código PHP:
$book $xml->children"book" );
$title $book->children"title" );
echo 
$title
Saludos.
Adaptado a mi caso, probe:

$book = $xml->apartado1->children( "sitio" );
$title = $book->children( "nombre" );

sin resultado.

Se esta resistiendo!!!

encontre esto por ahi:

Código:
 <?xml version="1.0"?>
  <entries xmlns:blog="http://www.edwardbear.org/serendipity/">
   <blog:entry>
    <blog:name>RPROF - Regular Expression Profiler</blog:name>
   </blog:entry>
   <blog:entry>
    <blog:name>Advanced PHP Programming</blog:name>
   </blog:entry>
  </entries>

To print out the names of all the different blog entries you could write the following code:


  <?php
  $entries = simplexml_load_file('syndic.xml');
  foreach ($entries->blog->entry as $entry) {
      printf("%s\n", $entry->name);
  }
  ?>
y probe:

$book = $xml->prueba->apartado1->sitio;
$title = $book->name;
echo $title;

Tampoco da resultado...

Última edición por juanvivo; 22/02/2008 a las 14:13
  #8 (permalink)  
Antiguo 22/02/2008, 16:39
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: simplexml_load_file

Revisa de nuevo este post: http://www.forosdelweb.com/f68/duda-simplexml-559577/

Prueba la nueva solución que puse.

Saludos.
  #9 (permalink)  
Antiguo 23/02/2008, 03:34
 
Fecha de Ingreso: junio-2006
Mensajes: 46
Antigüedad: 17 años, 9 meses
Puntos: 0
Gracias una vez mas por contestar GatorV,

he copiado tu ejemplo y lo he ejecutado y efectivamente devuelve "titulo".

Despues he intentado adaptarlo a mi ejemplo, de esta forma:

$ns = $xml->getNamespaces( true );
$xml->registerXPathNamespace('c', $ns['sitio']);
$title = $xml->xpath('//c:nombre');
echo $title[0];

y ya nop devuelve nada..

probe tambien con

$ns = $xml->prueba->getNamespaces( true );

y con

$ns = $xml->prueba->apartado1->getNamespaces( true );

y nada... Puedes explicarme tu codigo a ver si logro entenderlo y adaptarlo??

Muchas gracias

PD:

LO consegui con:

$ns = $xml->getNamespaces( true );
$xml->registerXPathNamespace('c', $ns['articulo1]);

//gname

$gname = $xml->xpath('//c:nombre');
echo $gname[0].'</br>';

MUCHAS GRACIAS VGATOR!

Ya lo tengo practicamentre listo... ;)

Una ultima cuestion.. :)

Si lo que quiero es un codigo que me devuelva el numero de entradas que hay en una etiqueta, como debo hacerlo?

ej:

<etq1:et>

<etq1:ejemplo>ejemplo 1</etq1:ejemplo>
<etq1:ejemplo>ejemplo 2</etq1:ejemplo>
<etq1:ejemplo>ejemplo 3</etq1:ejemplo>
<etq1:ejemplo>ejemplo 4</etq1:ejemplo>

</etq1:et>

Como pregunto ese numero de entradas (4), cuantas entradas tiene la etiqueta <etq1:ejemplo>?

Última edición por GatorV; 24/02/2008 a las 13:10
  #10 (permalink)  
Antiguo 24/02/2008, 13:11
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: simplexml_load_file

Puedes usar:
Código PHP:
$etiquetas $xml->xpath"//c:et" );
echo 
count$etiquetas ); // el numero de etiquetas
echo $etiquetas[0]; // Primer etiqueta 
Saludos.
  #11 (permalink)  
Antiguo 24/02/2008, 13:31
 
Fecha de Ingreso: junio-2006
Mensajes: 46
Antigüedad: 17 años, 9 meses
Puntos: 0
Re: simplexml_load_file

Perfecto , me funciono al momento, solo que necesito que sean las etiquetas de un atributo concreto, por que se repite y tu codigo me devuelve el total de etiquetas de todos los atributos.. :)

Como concreto para un atributo?

ej:
Código:
<etq1:et>

<etq1:ejemplo>ejemplo 1</etq1:ejemplo>
<etq1:ejemplo>ejemplo 2</etq1:ejemplo>
<etq1:ejemplo>ejemplo 3</etq1:ejemplo>
<etq1:ejemplo>ejemplo 4</etq1:ejemplo>

</etq1:et>
<etq1:et>

<etq1:ejemplo>ejemplo 5</etq1:ejemplo>
<etq1:ejemplo>ejemplo 6</etq1:ejemplo>
<etq1:ejemplo>ejemplo 7</etq1:ejemplo>
<etq1:ejemplo>ejemplo 8</etq1:ejemplo>

</etq1:et>
con tu ejemplo se muestran : 8

las 4 del primer id y las 4 del segundo id.

Hay algun metodo para que solo me devuelva 4? que en cuanto se encuentre con la etiqueta </etq1:et> deje de contar???

Muchisimas gracias gatorV, sin tu ayuda no habria podido avanzar en absoluto en este codigo...

Última edición por juanvivo; 26/02/2008 a las 11:37
  #12 (permalink)  
Antiguo 26/02/2008, 02:39
 
Fecha de Ingreso: junio-2006
Mensajes: 46
Antigüedad: 17 años, 9 meses
Puntos: 0
Re: simplexml_load_file

Solo me falta este detalle para poder usar el codigo :) . Alguien tiene idea de como hacerlo?
  #13 (permalink)  
Antiguo 26/02/2008, 09:20
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: simplexml_load_file

En el XPath, haz un query por ID.

Saludos.
  #14 (permalink)  
Antiguo 26/02/2008, 11:36
 
Fecha de Ingreso: junio-2006
Mensajes: 46
Antigüedad: 17 años, 9 meses
Puntos: 0
Re: simplexml_load_file

y si la etiqueta no tiene id?? como le digo que muestre solo hata que se cierre la etiqueta donde estan contenidos?
  #15 (permalink)  
Antiguo 26/02/2008, 11:39
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: simplexml_load_file

Mmm entonces tu XML no es valido, ya que si están en esos grupos, debe de haber alguna forma de referenciarlos, y si no es por ID debe de tenerla.

Valida primero tu XML con un DTD valido y luego trata de parsearlo con PHP.

Saludos.
  #16 (permalink)  
Antiguo 27/02/2008, 04:54
 
Fecha de Ingreso: junio-2006
Mensajes: 46
Antigüedad: 17 años, 9 meses
Puntos: 0
Re: simplexml_load_file

Si el xml si es valido, lo que pasa es que la id no la tiene en la etiqueta que envuelve a las otras, sin no, ... mejor te pongo un ejemplo por que no se expresarme en los terminos correctos.

Código:
<vpt la=1 lo=2>
	<name></name>
	<car></car>
	<gpk:logs>
        	<gpk:log id="39146139">
          		<gpk:date>fecha</gpk:date>
          		<gpk:type>perfecto</gpk:type>
          		<gpk:fin id="1">nombre</gpk:fin>
          		<gpk:text encoded="False">texto 1</gpk:text>
        	</gpk:log>
        	<gpk:log id="34860048">
          		<gpk:date>fecha2</gpk:date>
          		<gpk:type>perfecto</gpk:type>
          		<gpk:fin id="2">nombre2</gpk:fin>
          		<gpk:text encoded="False">Texto2</gpk:text>
        	</gpk:log>
	</gpk:logs>
</vpt>
<vpt la=3 lo=4>
	<name></name>
	<car></car>
	<gpk:logs>
        	<gpk:log id="39149856">
          		<gpk:date>fecha3</gpk:date>
          		<gpk:type>perfecto</gpk:type>
          		<gpk:fin id="3">nombre3</gpk:fin>
          		<gpk:text encoded="False">texto 3</gpk:text>
        	</gpk:log>
        	<gpk:log id="34863261">
          		<gpk:date>fecha4</gpk:date>
          		<gpk:type>perfecto</gpk:type>
          		<gpk:fin id="4">nombre4</gpk:fin>
          		<gpk:text encoded="False">Texto4</gpk:text>
        	</gpk:log>
	</gpk:logs>
</vpt>
Este es el codigo verdadero. Yo necesito mostrar solo los datos que hay entre las etiquetas <gpk:logs></gpk:logs>, pero solo las del primer <vpt>. El problema que tengo es que hago un bucle siguiendo las pistas que me habeis ido dando para mostrarlos asi, por mostraros una de las formas que he probado:

Código:
        	$etiquetas = $xml->xpath( "//c:log" );
		$numero = count ($etiquetas);
		
                for ( $i = 0 ; $i <= $numero ; $i ++){
                
               $ldate = $xml->xpath('//c:date');
	       echo $ldate[$i].'</br>';
Pero esto en vez de mostrarme los date de solo el <gpk:logs> de la primera etiqueta (<vpt la=1 lo=2>) me muestra todos los que hay en todas las etiquetas (fecha1,fecha2,fecha3,fecha4...etc)

Como puedo hacerlo para que solo me devuelva fecha1 y fecha 2 que son los que estan dentro de las primeras <gpk:logs>?

MUchisimas gracias por vuestra ayuda.

Última edición por juanvivo; 27/02/2008 a las 06:33
  #17 (permalink)  
Antiguo 27/02/2008, 09:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: simplexml_load_file

Juega con el xpath, no soy muy experto pero si haces un buen Query te debe de devolver solo los datos del primer vpt.

Te recomiendo pongas una duda en el foro de XML para que te orienten cual es el Xpath mas correcto a los datos que quieres.

Saludos.
  #18 (permalink)  
Antiguo 28/02/2008, 03:56
 
Fecha de Ingreso: junio-2006
Mensajes: 46
Antigüedad: 17 años, 9 meses
Puntos: 0
Re: simplexml_load_file

ok, gracias por la info.

El problema es que no tengo ni papa de querys en el xpath...

Movere la consulta al foro de XML como me recomiendas y os cuento...

MUchas gracias!
  #19 (permalink)  
Antiguo 02/03/2008, 12:05
 
Fecha de Ingreso: junio-2006
Mensajes: 46
Antigüedad: 17 años, 9 meses
Puntos: 0
Re: simplexml_load_file

De momento no hay suerte en ese foro. No contesta nadie...

Enlace
  #20 (permalink)  
Antiguo 04/03/2008, 09:41
 
Fecha de Ingreso: junio-2006
Mensajes: 46
Antigüedad: 17 años, 9 meses
Puntos: 0
Re: simplexml_load_file

Ya contestaron. En principio dicen que es un problema de PHP, no de xml...
  #21 (permalink)  
Antiguo 06/03/2008, 06:53
 
Fecha de Ingreso: junio-2006
Mensajes: 46
Antigüedad: 17 años, 9 meses
Puntos: 0
Re: simplexml_load_file

Al no encontrar solucion, decidi cargarme un poco el archivo xml. :)

COn pequeño codigo convierto los spacenames en etiquetas normales (sustituyo gpk:logs por gpklogs), y ya puedo llamarlas sin dificultad.

Pero ahora se me presenta otro problema. solo se me muestra el priomer registro... me explico:

Código:
	
		//LOGS
		
		//fecha del 1er log
	
		$ldate = $xml->wpt->gpkcach->gpklogs->gpklog->gpkdate;
		echo $ldate.'</br>';
Asi por ejemplo se muestra estupendamente lña fecha del primer gpklog. Antes con el xpath, para mostrar el segundo, hacia algo como $ldate[1], el tercero $ldate[2] yy asi sucesivamente, pero ahora esto no me funciona, ... si pongo otro numero que no sea [0], simplemente no muestra nada...

Donde esta ahora el fallo?
  #22 (permalink)  
Antiguo 06/03/2008, 07:07
 
Fecha de Ingreso: junio-2006
Mensajes: 46
Antigüedad: 17 años, 9 meses
Puntos: 0
Re: simplexml_load_file

Solucionado al fin.

Código:
$ldate = $xml->wpt->gpkcach->gpklogs->gpklog[numero]->gpkdate;
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 09:10.