Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/05/2010, 11:53
Serenity
 
Fecha de Ingreso: marzo-2002
Mensajes: 299
Antigüedad: 22 años, 2 meses
Puntos: 1
No mostrar registros repetidos de un xml

Hola!!, estoy integrando un webservice a una page, tengo varios detalles que aún no logro resolver, en este momento acudo a ustedes para solicitar su ayuda, al parsear un documento XML obtengo registros repetidos no porque se haga mal el parseo sino que los resultados proporcionados por el webservice así son:

Es la estructura de un hotel que va de la siguiente forma:

<hotels>
<hotel>
<hotelid>3</hotelid>
<hotelnombre>Acamar Beach Resort</hotelnombre>
<ciudad>Acapulco Zona Tradicional</ciudad>
<tipohabitacion>Superior con vista al Mar</tipohabitacion>
<detalles>
<habitaciones>...</habitaciones>
.
.
.
</detalles>
.
.
.
.
</hotel>

<hotel>
<hotelid>3</hotelid>
<hotelnombre>Acamar Beach Resort</hotelnombre>
<ciudad>Acapulco Zona Tradicional</ciudad>
<tipohabitacion>Doble</tipohabitacion>
<detalles>
<habitaciones>...</habitaciones>
.
.
.
</detalles>
.
.
.
.
</hotel>
<hotel>
<hotelid>3</hotelid>
<hotelnombre>Acamar Beach Resort</hotelnombre>
<ciudad>Acapulco Zona Tradicional</ciudad>
<tipohabitacion>Sencilla</tipohabitacion>
<detalles>
<habitaciones>...</habitaciones>
.
.
.
</detalles>
.
.
.
.
</hotel>
</hotels>



Como se darán cuenta hay etiquetas cuyo valor es el mismo pero otras donde es diferente, porque se trata de describir cada una de las habitaciones que corresponden a los hoteles.

Necesito en los resultados del parseo mostrar solamente un registro por cada hotel y y por cada uno mostrar las características que corresponden a cada habitación (aquí si mostrar los diferentes tipos de habitación).

No logro filtrar estos resultados para obtener lo que deseo, lo estoy haciendo de la siguiente forma:


$lista_hoteles=file_get_contents("http://www.miwebservice.com/xml/getQuoteDatos?a=test&password=fuerza&pais=ME&fecha =20100116 .........");
$xml = new SimpleXMLElement($lista_hoteles);

//quiero apoyarme de una variable para detectar el siguiente registro y no mostrarlo
$auxidhotel=0;
foreach($xml->hotels->hotel as $item){
if($auxid<>$item->hotelid){

echo $item->hotelname;

//aqui trato de hacer la otra consulta al WS enviando como parametro el $id del hotel que obtuve de la consulta anterior

$id=$item->hotelid;
$hotel_detalles=file_get_contents("http://www.miwebservice.com/xml/getHotelDetalles?a=test&pwd=fuerza&h=$id");

//aquí voy a mostrar las caracteristicas de cada habitación, que de momento me marca error por tiempo excedido pero ose es otro punto de momento el de mi
//interés es que no se repitan al mostrarlos

$xml_hotel = new SimpleXMLElement($hotel_detalles);
$xml_hotel->detalles->detalle as $item_hotel;
echo $xml_hotel->detalles->detalle->habitaciones;
}
// asigno el hotelid que se acaba de imprimir para continuar comparando
$auxid=$item->hotelid;

}


Pero esto no funciona, sigue mostrando todos los registros, qué me recomiendan??

Desde ya gracias!!