Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema cargando datos XML con PHP

Estas en el tema de Problema cargando datos XML con PHP en el foro de PHP en Foros del Web. Buenas de nuevo, vuelvo a pediros ayuda con un asunto que no logro solventar. Tengo el siguiente código php: Código: <select name="localidadList" id="localidadList" class="inputProv obligatorio" ...
  #1 (permalink)  
Antiguo 10/10/2014, 08:54
Avatar de SirZoX  
Fecha de Ingreso: mayo-2006
Ubicación: Valencia
Mensajes: 124
Antigüedad: 17 años, 11 meses
Puntos: 2
Problema cargando datos XML con PHP

Buenas de nuevo, vuelvo a pediros ayuda con un asunto que no logro solventar.

Tengo el siguiente código php:
Código:
<select name="localidadList" id="localidadList" class="inputProv obligatorio" >
    <option value="provNull" >Seleccione su población...</option><?php
    $xml = simplexml_load_file('../provinciasypoblaciones.xml');
    $result = $xml->xpath("/lista/provincia/localidades/localidad | /lista/provincia/nombre");
    for ($i=0; $i <= count($result); $i++) {
                        
		$poblacion = $result[$i];
		$provincia = $result[$i][1]; ?>
							
		<option value='<?php echo $poblacion[$i]; ?>'><?php echo $provincia." - ".$poblacion; ?></option><?php
    } ?>
</select>
Esto genera los <option> con todas las poblaciones del XML pero no como yo pensaba que debía.
El primer <option> siempre muestra el nombre de la provincia, seguido del guión, y de nuevo el nombre de la provincia. Es decir Barcelona - Barcelona.
Y los siguientes son todas las poblaciones de Barcelona en formato población - población.
Cuando llega a la siguiente provincia, lo mismo, primero muestra el nombre de la provincia y después el resto de poblaciones.

Lo que intento es que delante del nombre de la población salga el nombre de la provincia, es decir, Barcelona - Hospitalet.

Seguro que alguien puede echarme una manita.

Gracias.

Última edición por SirZoX; 10/10/2014 a las 09:16
  #2 (permalink)  
Antiguo 10/10/2014, 10:24
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 15 años, 11 meses
Puntos: 43
Respuesta: Problema cargando datos XML con PHP

Hola SirZoX,

Y si tratas de imprimirlo de la siguiente manera, que resultados te arroja?
Código PHP:
Ver original
  1. <select name="localidadList" id="localidadList" class="inputProv obligatorio" >
  2.     <option value="provNull" >Seleccione su población...</option><?php
  3.     $xml = simplexml_load_file('../provinciasypoblaciones.xml');
  4.     $result = $xml->xpath("/lista/provincia/localidades/localidad | /lista/provincia/nombre");
  5.     foreach($result as $row1)
  6.     { ?>
  7.                            
  8.         <option value='<?php echo $row1; ?>'><?php echo $row1." - ".$row1->POBLACION; ?></option><?php
  9.     } ?>
  10. </select>
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #3 (permalink)  
Antiguo 10/10/2014, 11:27
Avatar de SirZoX  
Fecha de Ingreso: mayo-2006
Ubicación: Valencia
Mensajes: 124
Antigüedad: 17 años, 11 meses
Puntos: 2
Respuesta: Problema cargando datos XML con PHP

Con ese código lo que me retorna es "poblacion - "
row1 toma el valor de la población, pero después del guión no muestra nada..

el problema puede venir por la consulta xpath?
entiendo que si uso el separador " | ", de alguna manera tengo que poder acceder desde $result no?

he probado, en vez de usando $row1->POBLACION, usando $row1->localidad y $row1->nombre, pero en ambos casos me devuelve null o espacio en blanco.

dejo un fragmento del archivo XML, por si puede ayudar por la estructura.

Código:
<lista>
	<provincia id="3">
		<nombre><![CDATA[Alicante]]></nombre>
		<localidades>
			<localidad c="0"><![CDATA[Abdet]]></localidad>
			<localidad c="0"><![CDATA[Abiar, L`]]></localidad>
			<localidad c="0"><![CDATA[Abio]]></localidad>
  #4 (permalink)  
Antiguo 10/10/2014, 11:38
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 15 años, 11 meses
Puntos: 43
Respuesta: Problema cargando datos XML con PHP

Ok, viendo el XML las cosas cambian, intenta con esto a ver:

Código PHP:
Ver original
  1. <select name="localidadList" id="localidadList" class="inputProv obligatorio" >
  2.     <option value="provNull" >Seleccione su población...</option><?php
  3.     $xml = simplexml_load_file('../provinciasypoblaciones.xml');
  4.     $result = $xml->xpath("/lista/provincia/localidades/localidad | /lista/provincia");
  5.     foreach($result as $row1)
  6.     { ?>
  7.                            
  8.         <option value='<?php echo $row1; ?>'><?php echo $row1->nombre." - ".$row1->localidades->localidad; ?></option><?php
  9.     } ?>
  10. </select>
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #5 (permalink)  
Antiguo 10/10/2014, 13:26
Avatar de SirZoX  
Fecha de Ingreso: mayo-2006
Ubicación: Valencia
Mensajes: 124
Antigüedad: 17 años, 11 meses
Puntos: 2
Respuesta: Problema cargando datos XML con PHP

Estamos avanzando !! :D
Ahora genera los <option>, pero únicamente el primero de cada provincia con los datos y el resto sin datos. Es decir.

<option value = "">Alicante - Abdet</option>
<option value = "Adbet"> - </option>
<option value = "Abiar, L`"> - </option>
.....
<option value = "">Barcelona - Abrera </option>
<option value = "Abrera"> - </option>
<option value = "Aguilar de Segarra"> - </option>
.....

Curioso que el value del <option> esté vacío pero sí escriba provincia - localidad, y sin embargo los siguientes values contienen la localidad pero no imprimen nada :/
Ahora me siento más perdido porque no entiendo porqué hace eso
  #6 (permalink)  
Antiguo 10/10/2014, 14:25
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 15 años, 11 meses
Puntos: 43
Respuesta: Problema cargando datos XML con PHP

Listo, perfecto entonces solo bastaría hacer un nuevo foreach que recorra los items internos.

Algo así:
Código PHP:
Ver original
  1. <select name="localidadList" id="localidadList" class="inputProv obligatorio" >
  2.     <option value="provNull" >Seleccione su población...</option><?php
  3.     $xml = simplexml_load_file('../provinciasypoblaciones.xml');
  4.     $result = $xml->xpath("/lista/provincia/localidades/localidad | /lista/provincia");
  5.     foreach($result as $prov)
  6.     {
  7.         foreach($prov->localidades as $local)
  8.          {
  9.      ?>                      
  10.         <option value='<?php echo $local->localidad; ?>'><?php echo $prov->nombre." - ".$local->localidad; ?></option>
  11.     <?php
  12.          }
  13.     }
  14.      ?>
  15. </select>
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #7 (permalink)  
Antiguo 10/10/2014, 15:50
Avatar de SirZoX  
Fecha de Ingreso: mayo-2006
Ubicación: Valencia
Mensajes: 124
Antigüedad: 17 años, 11 meses
Puntos: 2
Respuesta: Problema cargando datos XML con PHP

Casi casi.

Antes de que respondieras había estado trasteando con más opciones pero ninguna llegó a funcionar.
La que propones ahora muestra sólo el primer resultado de "localidad" por cada una de las provincias que encuentra en el XML.

He intentado hacerlo con un for en vez del foreach interior, pero no consigo tampoco que muestre todas las localidades de la provincia que viene del foreach exterior.
  #8 (permalink)  
Antiguo 10/10/2014, 15:57
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 15 años, 11 meses
Puntos: 43
Respuesta: Problema cargando datos XML con PHP

Perdón, creo que he cometido un error en el post anterior.

Código PHP:
Ver original
  1. <select name="localidadList" id="localidadList" class="inputProv obligatorio" >
  2.     <option value="provNull" >Seleccione su población...</option><?php
  3.     $xml = simplexml_load_file('../provinciasypoblaciones.xml');
  4.     $result = $xml->xpath("/lista/provincia/localidades/localidad | /lista/provincia");
  5.     foreach($result as $prov)
  6.     {
  7.         foreach($prov->localidades->localidad as $local)
  8.          {
  9.      ?>                      
  10.         <option value='<?php echo $local; ?>'><?php echo $prov->nombre." - ".$local; ?></option>
  11.     <?php
  12.          }
  13.     }
  14.      ?>
  15. </select>

Escribir código a medias ciegas es algo complicado :P
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #9 (permalink)  
Antiguo 10/10/2014, 17:01
Avatar de SirZoX  
Fecha de Ingreso: mayo-2006
Ubicación: Valencia
Mensajes: 124
Antigüedad: 17 años, 11 meses
Puntos: 2
Respuesta: Problema cargando datos XML con PHP

Genial !!!!

Ya está en marcha :)

Muchísimas gracias the_web_saint.
La verdad es que la última opción que se me había ocurrido es que haciendo un único for, dentro del mismo hacer otra consulta xpath que buscara las poblaciones cuya provincia devolviera el índice del for, pero no sería tan buena solución como la que al final me has propuesto.

Genial, estupendo de verdad. :)

Etiquetas: 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 21:40.