Foros del Web » Programando para Internet » PHP »

Xml a partir de array

Estas en el tema de Xml a partir de array en el foro de PHP en Foros del Web. Hola, Necesito generar a partir de un array el siguiente XML: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código XML: Ver original <RoomStayCandidates >     <RoomStayCandidate RoomID = "01" ...
  #1 (permalink)  
Antiguo 17/07/2012, 09:23
 
Fecha de Ingreso: abril-2006
Mensajes: 173
Antigüedad: 13 años, 8 meses
Puntos: 0
Xml a partir de array

Hola,

Necesito generar a partir de un array el siguiente XML:
Código XML:
Ver original
  1. <RoomStayCandidates>
  2.     <RoomStayCandidate RoomID = "01">
  3.         <GuestCounts>
  4.             <GuestCount Age = "30"/>
  5.             <GuestCount Age = "30"/>
  6.             <GuestCount Age = "6"/>
  7.         </GuestCounts>
  8.     </RoomStayCandidate>
  9. </RoomStayCandidates>


He probado con este array:

Código PHP:
Ver original
  1. $acomodation = array("RoomStayCandidate" =>array(
  2.                             "RoomID" => "1",                        
  3.                             "GuestCounts" => array(
  4.                                'GuestCount' => array(
  5.                       array("Age"=>"30"),
  6.                       array("Age"=>"30"),
  7.                                       array("Age"=>"30"),
  8.                     )                                
  9.                              )                            
  10.                     )
  11.                 );


Pero con este array, el XML que me genera el cliente SOAP es este, y no me sirve porque me salen los tags GuestCount anidados, y yo no los quiero anidados, los quiero como en el XML de arriba:

Código XML:
Ver original
  1. <RoomStayCandidates>
  2.     <RoomStayCandidate RoomID = "01">
  3.         <GuestCounts>
  4.             <GuestCount Age = "30">
  5.                   <GuestCount Age = "30">
  6.                       <GuestCount Age = "6">
  7.                       </GuestCount>
  8.                   </GuestCount>
  9.              </GuestCount>
  10.         </GuestCounts>
  11.     </RoomStayCandidate>
  12. </RoomStayCandidates>


Se os ocurre con que array lo puedo hacer?

Muchas gracias,
Victor.

Última edición por vicfebo; 17/07/2012 a las 09:34
  #2 (permalink)  
Antiguo 17/07/2012, 09:41
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 9 años
Puntos: 155
Respuesta: Xml a partir de array

te genera?? como que te genera?? cual es el código que te lo genera?
__________________
No me interesan ni las gracias ni los karmas , pero si que se genere conocimiento, si se dio con la respuesta por favor confirmalo
  #3 (permalink)  
Antiguo 17/07/2012, 10:00
 
Fecha de Ingreso: abril-2006
Mensajes: 173
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Xml a partir de array

Siendo $client un objeto SOAPCLIENT de PHP, Al invocar un metodo de un webservice con un array de datos $param, este internamente inyecta en el webservice un XML equivalente a ese array. De esto ya se encarga la libreria soapclient nativa de PHP.

Esta es la llamada que uso y que siempre he usado con los webservice con los que trabajo:

$client->NombreMetodo($array_param);
  #4 (permalink)  
Antiguo 17/07/2012, 10:45
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 9 años
Puntos: 155
Respuesta: Xml a partir de array

a ver vi esta liga

http://stackoverflow.com/questions/1...y-to-simplexml

ve como genera un xml con nodos repetidos, usando indices numéricos
__________________
No me interesan ni las gracias ni los karmas , pero si que se genere conocimiento, si se dio con la respuesta por favor confirmalo
  #5 (permalink)  
Antiguo 18/07/2012, 03:34
 
Fecha de Ingreso: abril-2006
Mensajes: 173
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Xml a partir de array

Hacíendolo tal y como sale en el ejemplo, queda el XML de esta manera:

Código XML:
Ver original
  1. <roomstaycandidate roomid="1">
  2.         <guestcounts>
  3.             <guestcount>
  4.                 <guestcount>
  5.                 </guestcount>
  6.             </guestcount>
  7.         </guestcounts>
  8.      </roomstaycandidate>


El array que le paso es este:

Código PHP:
Ver original
  1. $acomodation = array("RoomStayCandidate" =>array(
  2.                             "RoomID" => "1",                        
  3.                             "GuestCounts" => array(
  4.                                0=> array('GuestCount' => array("Age"=>"30")),
  5.                    1=> array('GuestCount' => array("Age"=>"30"))
  6.                  )                                                                                        
  7.                            )
  8.                          );


Yo no quiero que el TAG GUESTCOUNT quede anidado como en el ejemplo. YO lo quiero asi:

Código XML:
Ver original
  1. <roomstaycandidate roomid="1">
  2.         <guestcounts>
  3.             <guestcount>
  4.             </guestcount>
  5.             <guestcount>
  6.             </guestcount>
  7.         </guestcounts>
  8.      </roomstaycandidate>

Sabéis como podría hacerlo?
  #6 (permalink)  
Antiguo 18/07/2012, 07:10
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 12 años
Puntos: 32
Respuesta: Xml a partir de array

Yo tengo hecho esto. La estructura del array de datos tenía algo particular que no recuerdo bien lo que era. Te he puesto unos ejemplos que funcionan.

Código PHP:
function CrearXml($array_datos)
{
    
$XmlWriter = new XmlWriter();
    
$XmlWriter->openMemory();
    
$XmlWriter->startDocument('1.0''UTF-8');
    
$XmlWriter->startElement('roomstaycandidate');
    
Write($XmlWriter$array_datos);
    
$XmlWriter->endElement();
    return 
$XmlWriter->outputMemory(true);
}

function 
Write(XMLWriter $XmlWriter$array_datos)
{
    foreach(
$array_datos as $key=>$value)
    {
        if(
is_array($value))
        {
            if(!
is_int($key)){
                
$XmlWriter->startElement($key);
            }
            
Write($XmlWriter$value);
            if(!
is_int($key)){
                
$XmlWriter->endElement();
            }
            continue;
        }

        
$XmlWriter->writeElement($key$value);
    }
}

$array_datos = array("a"=>
                        array(
"b"
                                
=>"c"));

echo 
htmlentities(CrearXml($array_datos));

$array_datos = array("a"=>array("b"=>"c",
                                
"d"=>"e"));

echo 
htmlentities(CrearXml($array_datos));

$array_datos = array ('a' =>
                            array (
'b' =>
                                        array (
=>array ('c' =>array ('d' => 'e')),
                                                
=> array ('f' => 'g',
                                                          
'h' => 'i',)
                                                    )
                                                  )
                                                );


echo 
htmlentities(CrearXml($array_datos)); 
  #7 (permalink)  
Antiguo 19/07/2012, 02:39
 
Fecha de Ingreso: abril-2006
Mensajes: 173
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Xml a partir de array

Pero esta función no me sirve para nada, yo lo que necesito es saber que array tengo que construir y que sea equivalente el XML qque indicaba antes.

Lo que tu me has puesto es una función que genera un XML a partir de un array. :(

Saludos,
  #8 (permalink)  
Antiguo 19/07/2012, 02:51
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 12 años
Puntos: 32
Respuesta: Xml a partir de array

Cita:
Iniciado por vicfebo Ver Mensaje
Pero esta función no me sirve para nada, yo lo que necesito es saber que array tengo que construir y que sea equivalente el XML qque indicaba antes.

Lo que tu me has puesto es una función que genera un XML a partir de un array. :(

Saludos,
Si quieres voy y te hago la aplicación....
  #9 (permalink)  
Antiguo 19/07/2012, 04:12
 
Fecha de Ingreso: junio-2012
Ubicación: sabadell
Mensajes: 46
Antigüedad: 7 años, 6 meses
Puntos: 6
Respuesta: Xml a partir de array

Código PHP:
Ver original
  1. $acomodation = array('RoomStayCandidate' => array('RoomID' => array('GuestCounts' => array('GuestCount' => array('Age')))));

Si solo necesitas almacenar edades dentro de una habitacion.. por que no almacenas solo eso?
y luego tu le das salida dentro de un bucle y pones las etiquetas ya a tu disposicion..

Código PHP:
Ver original
  1. $acomodation = array();
  2. $acomodation[$tu_variable_del_RoomID] = array($edad1, $edad2, $edad3)

Pienso que te seria mucho más cómodo así que no ir almacenando etiquetas en forma de array

De todas formas y siendote franco.. no te entendí con claridad..
Suerte!
__________________
Ante una duda.. ha de mostrarse valor/esfuerzo..
  #10 (permalink)  
Antiguo 19/07/2012, 05:06
 
Fecha de Ingreso: abril-2006
Mensajes: 173
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Xml a partir de array

El webservice que estoy utilizando solo acepta el XML de la manera que he puesto anteriormente. Por eso tengo que adaptarme a su formato :(
  #11 (permalink)  
Antiguo 19/07/2012, 09:13
 
Fecha de Ingreso: abril-2006
Mensajes: 173
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Xml a partir de array

Cita:
Iniciado por cluster28 Ver Mensaje
Si quieres voy y te hago la aplicación....

Viendo tus respuestas, evidentemente NO QUIERO que me hagas la aplicación ;)
  #12 (permalink)  
Antiguo 19/07/2012, 09:29
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 12 años
Puntos: 32
Respuesta: Xml a partir de array

Perdona vicfebo, he estado revisando el post y, efectivamente, no había entendido bien la consulta. Pensaba que quería hacer un xml a partir de arrays.

Siempre los vas a crear con soap, verdad?

Los clientes soap se suele basar en unos descriptores WSDL para crear la estructura xml. ¿No los tienes?

Viendo el descriptor es fácil averiguar la estructura del array.
  #13 (permalink)  
Antiguo 19/07/2012, 10:31
 
Fecha de Ingreso: abril-2006
Mensajes: 173
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Xml a partir de array

No pasa nada, culpa mía alomejor por no explicarme bien.
Lo malo es que no tengo la especificación WSDL :( He probado de todas la maneras y siempre me pone los nodos anidados no se porque.

Gracias
  #14 (permalink)  
Antiguo 19/07/2012, 10:50
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 12 años
Puntos: 32
Respuesta: Xml a partir de array

Pues entonces tendrás que usar SoapClient::__doRequest y pasarle el xml creado a manopla.
  #15 (permalink)  
Antiguo 19/07/2012, 10:53
 
Fecha de Ingreso: abril-2006
Mensajes: 173
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Xml a partir de array

Muchas gracias, probaré con eso.

Saludos!

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 22:21.