Ver Mensaje Individual
  #3 (permalink)  
Antiguo 02/04/2013, 12:30
Avatar de andresdzphp
andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 5 meses
Puntos: 793
Respuesta: SimpleXML: "fusionar elementos"

Se me fue el tiempo jugando con clases y di mil vueltas, por lo menos te da una idea, aunque debería hacerse en un solo bucle y solo con las clases DOM:

Código PHP:
Ver original
  1. <?php
  2.  
  3. $sxe = new SimpleXMLElement('test.xml', null, true);
  4.  
  5. $tmp = array();
  6.  
  7. $source = '<pedidos>';
  8.  
  9. foreach ($sxe->pedido as $p) {
  10.     $tmp[(int)$p->id][] = (int) $p->articulo;
  11. }
  12.  
  13. $source = '<pedidos>';
  14.  
  15. foreach ($tmp as $id => $articulo) {
  16.     $source .= "<pedido><id>$id</id>";
  17.     foreach ($articulo as $a) {
  18.         $source .= "<articulo>$a</articulo>";
  19.     }
  20.     $source .= '</pedido>';
  21. }
  22.  
  23. $source .= '</pedidos>';
  24.  
  25. $doc = new DomDocument('1.0', 'utf8');
  26. $doc->preserveWhiteSpace = false;
  27. $doc->formatOutput = true;
  28. $doc->loadXML($source);
  29. $res = $doc->saveXML($doc);
  30.  
  31. $handle = fopen('final.xml', 'w+');
  32. fwrite($handle, $res);
  33. fclose($handle);

Resultado:

Código XML:
Ver original
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <pedidos>
  3.   <pedido>
  4.     <id>123456789</id>
  5.     <articulo>100</articulo>
  6.     <articulo>200</articulo>
  7.   </pedido>
  8.   <pedido>
  9.     <id>987654321</id>
  10.     <articulo>400</articulo>
  11.   </pedido>
  12. </pedidos>
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP