2011-12-07 11 views
7

voglio sostituire un valore "VAL1" di un elemento in file xmlXML :: LibXML sostituire valore dell'elemento

Per qualche ragione non funziona per me:

<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');  

L'errror è ottenere è "Impossibile trovare il metodo oggetto 'setValue' tramite pacchetto 'XML :: :: LibXML elemento ...'

risposta

7

non c'è metodo nella setValueNode o Element classi, vedere la documentazione per la lista dei metodi disponibili. È puoi rimuovere i figli dell'elemento e aggiungere il nuovo nodo di testo li ke questo:

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

Da dove viene il numero setValue? Nessun oggetto XML::LibXML ha un tale metodo.

Inoltre, un elemento non ha un valore, quindi sicuramente non è possibile impostarlo.

"VAL1" è il valore del nodo figlio dell'elemento, uno text node.

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

Sfortunatamente, non è completamente sicuro. Cosa succede se l'elemento ha più nodi figlio di testo? Cosa succede se non ne ha affatto?

Il modo più sicuro è quello di afferrare l'elemento, eliminare tutti i suoi figli che sono nodi di testo (che possono essere facilmente eliminati rimuovendo tutti i nodi figlio) e aggiungere un nuovo nodo di testo con il valore desiderato.

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

Grazie! Sta funzionando –