[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 09:35:48 CET 2008


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()

He mirado en la documentacion de PHP y el objetp DOMElement no tiene 
este metodo, solo los DOMNode lo tienen.

Tengo que encontrar una forma de que $last sea un DOMNode para poder 
usar appendChild() o alguna otra forma


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