[eside-ghost] formulario PHP para añadir datos en XML -- era ( formulario php para subir archivos via FTP )
altern
altern2 en gmail.com
Jue Mar 27 14:56:51 CET 2008
Alfredo Beaumont(e)k dio:
> 2008/3/27, altern <altern2 en 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 ;)
como dice Homer... DOOH!!! pues si la verdad que estoy, como dicen los
ingleses, "spoiled" por Python, me cuesta un huevo programar en otros
lenguages pq me resultan muy incomodos. Me tendre que estudiar un manual
o buscar un hueco para asistir los cursos de verano
GRACIAS!!
este es el script final por si a alguien le interesa
<?php
$doc = new DOMDocument();
$doc->load( 'data.xml' );
$doc->formatOutput = true;
$markers= $doc->getElementsByTagName("markers");
$len = $markers->length;
$last = $markers->item($len-1);
$newm = $doc->createElement( "marker" );
$lat = $doc->createElement( "name" );
$lat->appendChild( $doc->createTextNode( "namedataxxx" ) );
$newm->appendChild( $lat );
$last->appendChild($newm);
$doc->saveXML();
$doc->save("data.xml")
?>
enrike
Más información sobre la lista de distribución eside-ghost