Re: [eside-ghost] formulario PHP para añadir datos en XML -- era ( formulario php para subir archivos via FTP )

Alfredo Beaumont alfredo.beaumont en gmail.com
Jue Mar 27 11:11:19 CET 2008


2008/3/27, altern <altern2 a bildua gmail.com>:
> Alfredo Beaumont(e)k dio:
> > Az, 2008eko Marren 26a(e)an, altern(e)k idatzi zuen:
> > [...]
> >> No me empapo muy bien del PHP pq estoy acostumbrado a usar Python y se
> >> me hace un poco raro leer la syntasis de php en los ejemplos que
> >> encuentro. Esto es mas o menos el codigo que estoy probando ahora. Casca
> >> pq $markers no tiene un metodo appendChild() al ser un objeto tipo
> >> DOMNodeList
> >>
> >>
> >> $doc = new DOMDocument();
> >> $doc->load( 'data.xml' );
> >> $doc->formatOutput = true;
> >>
> >> $markers = $doc->getElementsByTagName("markers")
> >>
> >> $m = $doc->createElement( "marker" );
> >>
> >> $lat = $doc->createElement( "nombre" );
> >> $lat->appendChild( $doc->createTextNode( "xxxnombre" ) );
> >> $m->appendChild( $lat );
> >>
> >> $markers.appendChild($m); // **Aqui casca!!****
> >>
> >> $doc->saveXML();
> >> $doc->save("data.xml")
> >
> > No se si lo he entendido muy bien, pero si lo que quieres es ir añadiendo
> > elementos de tipo 'marker', tal como parece indicar el ejemplo, lo único
> que
> > necesitas es convertir el DOMNodeList en un DOMElement. En este caso es
> > trivial, ya que el DOMNodeList sólo tiene un elemento:
> >
> > $markers_element = $markers->item(0);
> > $markers_element->appendChild(0);
> >
> > Si he entendido bien lo que necesitas, con esto lo tendrías.
>
> Si, esa es la idea, añadir nuevos <marker> dentro del <markers>
>
> pero no me funciona
>
> $doc = new DOMDocument();
> $doc->load( 'data.xml' );
> $doc->formatOutput = true;
> $markers= $doc->getElementsByTagName("markers");
> $last = $markers->item(0); //pq ahora solo hay un item
> print_r($last);
> $m = $doc->createElement( "marker" );
> $lat = $doc->createElement( "name" );
> $lat->appendChild( $doc->createTextNode( "namedataxxx" ) );
> $m->appendChild( $lat );
> $last.appendChild($m); /* **CASCA AQUI** */
> $doc->saveXML();
> $doc->save("data.xml")
>
> el print_r me dice que es un DOMElement hasta ahi bien pero el error es
> Fatal error: Call to undefined function appendChild()

DOMElement hereda de DOMNode, por lo que hereda el método. El problema
es que no estás llamando bien al método, cambia el '.' por '->'. Creo
que tu ascendencia pythoniana te ha jugado una mala pasada ;)

Saludos


Más información sobre la lista de distribución eside-ghost