Foros del Web » Programando para Internet » PHP »

indentar XML con PHP

Estas en el tema de indentar XML con PHP en el foro de PHP en Foros del Web. Buenas, soy nuevo en éste gran foro que tantas veces me ha ayudado y del que tanto he aprendido. Bueno, ésta vez he decidido hacer ...
  #1 (permalink)  
Antiguo 08/04/2011, 07:20
 
Fecha de Ingreso: abril-2011
Mensajes: 18
Antigüedad: 13 años
Puntos: 0
Exclamación indentar XML con PHP

Buenas, soy nuevo en éste gran foro que tantas veces me ha ayudado y del que tanto he aprendido. Bueno, ésta vez he decidido hacer una consulta. Mil disculpas si abro un hilo que ya existe, es que busque por todos lados y no encontré nada parecido. Si ya existe, por favor disculpen y posteen el link.

Bueno, al grano...Estoy trabajando en una galería de imágenes flash con XML y he descubierto (soy bastante nuevo en ésto de PHP) que puedo modificar el archivo XML desde un PHP. Hasta ahí va bien, entiendo la sintáxis y los algorítmos para hacer eso, pero tengo una duda muy grande: Cuando edito el XML de forma dinámica, no se indenta el código (obviamente) y quiero saber si existe alguna manera de hacer eso. Espero que se entienda lo que pido, y si no es así por favor pídanme y aclaro sus dudas.

Espero la respuesta de alguno de ustedes, gurúes iluminadores del PHP. Desde ya muchas gracias.
  #2 (permalink)  
Antiguo 08/04/2011, 08:59
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: indentar XML con PHP

a que llamas identar un xml?

yo no enteder!
  #3 (permalink)  
Antiguo 08/04/2011, 09:27
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
Respuesta: indentar XML con PHP

Saludos

Esta función la obtuve de un blog y me ha funcionado perfecto:

Código PHP:
Ver original
  1. function formatXml($archivoXml) {
  2.         $doc = new DOMDocument();
  3.         $doc->preserveWhiteSpace = false;
  4.             doc->formatOutput = true;
  5.         $doc->load($archivoXml);
  6.         $doc->save($archivoXml);
  7. }
__________________
:.:Nano.:: @nano_hard - Retornando al foro
  #4 (permalink)  
Antiguo 08/04/2011, 15:20
 
Fecha de Ingreso: abril-2011
Mensajes: 18
Antigüedad: 13 años
Puntos: 0
Respuesta: indentar XML con PHP

Muchsa gracias Nano_, sabía que algo de DOM tenía que ser, y me mate buscando por PHP.NET pero no encontre nada jaja. De todas formas, no me funciona, me tira el siguiente error: failed to load external entity "file:///C:/xampp/htdocs/editarxml/%0A%0A%09%0A%09%0A%09%0A%0A".

Mi duda es: ¿Dónde tengo que reemplazar el nombre de mi variable XML en ese codigo?
¿Tengo que llamar a la función y poner como parametro mi variable XML? Espero entiendas mi duda, o pueda explicarme más o menos como funciona la función. Avisame si querés que te pase mi código para entendernos mejor. Desde y, muchas gracias por contestar.

Patriarka: No es por ofender, aunque si bien no soy un experto llevo un tiempo en la programación en general..pero...Esa no es una pregunta para hacer a esta altura del partido creo. De todas formas, te contesto a ver si me podés ayudar. Me explico con ejemplos

TEXTO NO INDENTADO (puede variar, pero mira el otro para entender):
Código XML:
Ver original
  1. <nodoPadre>
  2. <nodoHIjo></nodoHijo><nodoHijo></nodoHIjo></nodoPadre>

TEXTO INDENTADO:
Código XML:
Ver original
  1. <nodoPadre>
  2.    <nodoHijo>
  3.    </nodoHijo>
  4.    
  5.    <nodoHijo>
  6.    </nodoHijo>
  7.  
  8. </nodoPadre>


En resumen y más sencillo: Un texto indentado es cuando tiene las tabulaciones en cada child.

Muchas gracias y espero puedan iluminarme.
  #5 (permalink)  
Antiguo 08/04/2011, 15:58
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: indentar XML con PHP

Skell, me atrevo a preguntar... ¿pues como has utilizado el código que te mostró Nano_?

pues yo le creo, dicho código debería funcionar en buenas manos...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 08/04/2011, 16:10
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: indentar XML con PHP

Con lo que te dio Nano_ puede funcionar, aunque yo lo que he visto que colocan el formatOutput despues de load, ejemplo http://www.php.net/manual/en/class.d...ment.php#96055
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 08/04/2011, 18:19
 
Fecha de Ingreso: abril-2011
Mensajes: 18
Antigüedad: 13 años
Puntos: 0
Respuesta: indentar XML con PHP

Muchas gracias a todos por su aporte. Estuve probando y al final comprendí el DOM, pero tengo una duda gigantesca que hace horas me rompe el bocho y no puedo figurarme como hacerlo. Esta vez no es de formato, sino de edicion de contenido (lo de formato anduvo barbaro).

Es lo siguiente:

Supongamos un XML de un playlist.
Código XML:
Ver original
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2.  
  3. <playlist>
  4.    
  5.     <cancion>
  6.    
  7.         <titulo>Can't you see me</titulo>
  8.         <banda>The Jimi Hendrix Experience</banda>
  9.    
  10.     </cancion> 
  11.    
  12.     <cancion>
  13.    
  14.         <titulo>Just like a woman</titulo>
  15.         <banda>Bob Dylan</banda>
  16.    
  17.     </cancion>
  18.  
  19. </playlist>

Lo que yo quiero hacer es agregar los siguietes nodos:

1- Un nuevo nodo cancion
2- Dentro de él, un nodo titulo
3- Dentro del mismo cancion un nodo banda

Osea, agregar un nuevo 'elemento' a la 'playlist'.

Para ello utilizo el siguiente algoritmo:

Código PHP:
Ver original
  1. $nodo = $dom->createElement('cancion');
  2. $new = $dom->appendChild($nodo);

Pero si hago eso repetido tres veces, me modifica el xml, pero me pone los tres como 'padres'. La cuestion es la siguiente: ¿Cómo hago para ingresar el nodo 'cancion' dentro del nodo root ('playlist') y hacer lo mismo pero con el 'titulo' y la 'banda', dentro del nodo 'cancion'?

Es decir, quiero saber si existe alguna manera de especificar que los nodos se creen dentro de otro y no como nuevos padres.

¿Se entiende lo que pido? Espero que sí, si no pregunten y detallo más (si es que se puede, jaja).

Desde ya muchas gracias.

Última edición por Skell; 08/04/2011 a las 18:25
  #8 (permalink)  
Antiguo 08/04/2011, 18:41
 
Fecha de Ingreso: abril-2011
Mensajes: 18
Antigüedad: 13 años
Puntos: 0
Respuesta: indentar XML con PHP

Hola de nuevo, ya pude crear el nodo cancion dentro de playlist empleando firstchild.
Para los interesados:
Código PHP:
Ver original
  1. $nodo = $dom->createElement('cancion');
  2. $new = $dom->firstChild->appendChild($nodo);

Ahora bien, ¿Existe alguna manera de alojar al nodo cancion como una varable, o algo para acceder a el y agregar ahí los otros dos hijos?

Espero su respuesta. Gracias por leer.
  #9 (permalink)  
Antiguo 09/04/2011, 08:05
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: indentar XML con PHP

Pero si ya lo estás haciendo
Código PHP:
Ver original
  1. <?php
  2. $xml = <<<XML
  3. <?xml version="1.0" encoding="ISO-8859-1"?>
  4. <playlist>
  5.     <cancion>
  6.         <titulo>Can't you see me</titulo>
  7.         <banda>The Jimi Hendrix Experience</banda>
  8.     </cancion>
  9.     <cancion>
  10.         <titulo>Just like a woman</titulo>
  11.         <banda>Bob Dylan</banda>
  12.     </cancion>
  13. </playlist>
  14. XML;
  15.  
  16. $dom = new DOMDocument();
  17. $dom->preserveWhiteSpace = false;
  18. $dom->formatOutput = true;
  19. $dom->loadXML($xml);
  20.  
  21. $foo = $dom->createElement('foo');
  22. $foo = $dom->firstChild->appendChild($foo);
  23.  
  24. $bar = $dom->createElement('bar','bar');
  25. $foo->appendChild($bar);
  26.  
  27. $candy = $dom->createElement('candy','candy');
  28. $foo->appendChild($candy);
  29.  
  30. echo $dom->saveXML();
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #10 (permalink)  
Antiguo 09/04/2011, 14:15
 
Fecha de Ingreso: abril-2011
Mensajes: 18
Antigüedad: 13 años
Puntos: 0
Respuesta: indentar XML con PHP

Muchas gracias, abimaelrc. A veces la respuesta está bajo nuestras narices. De todas formas yo creí haber intentado algo parecido, pero bue, suele pasar.

Gracias a todos por su aporte. Saludos.

Etiquetas: flash-php, galeria, imagenes, indentar, 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 10:37.