2011-12-07 9 views
7

quiero reemplazar un valor "VAL1" de un elemento en el archivo xmlXML :: LibXML reemplazar valor del elemento

Por alguna razón no funciona para mí:

<testing> 
<application_name>TEST</application_name> 
<application_id>VAL1</application_id> 
<application_password>1234</application_password> 
    </testing> 

my $parser =XML::LibXML->new(); 
$tree =$parser->parse_file($xml); 
$root =$tree->getDocumentElement; 
my ($elem)=$root->findnodes('/testing/application_id'); 
$elem->setValue('VAL2');  

El errror es conseguir es "no se puede encontrar método de objeto 'setValue' a través de paquete de 'XML :: :: LibXML Elemento ...'

Respuesta

7

no hay método en el setValueNode o Element clases, consulte la documentación para la lista de métodos disponibles. Usted puede eliminar elementos secundarios del elemento y anexar un nuevo nodo de texto ke esto:

$elem->removeChildNodes(); 
$elem->appendText('VAL2'); 
16

¿De dónde sacaste setValue de? Ningún objeto XML::LibXML tiene dicho método.

Además, un elemento no tiene un valor, por lo que definitivamente no puede configurarlo.

"VAL1" es el valor del nodo secundario del elemento, un text node.

my ($application_id_text) = $root->findnodes('/testing/application_id/text()'); 
$application_id_text->setData('VAL2'); 

Lamentablemente, eso no es completamente seguro. ¿Qué sucede si el elemento tiene múltiples nodos secundarios de texto? ¿Qué pasa si no tiene ninguno?

La manera más segura es agarrar el elemento, eliminar todos sus elementos secundarios que son nodos de texto (lo que puede hacerse fácilmente eliminando todos sus nodos secundarios) y agregar un nuevo nodo de texto con el valor deseado.

my ($application_id_node) = $root->findnodes('/testing/application_id'); 
$application_id_node->removeChildNodes(); 
$application_id_node->appendText('VAL2'); 
+0

¡Gracias! Esta funcionando –

Cuestiones relacionadas