2011-12-07 15 views
7

Chcę zastąpić „VAL1” wartości elementu w pliku xmlXML :: libxml zastąpić wartość elementu

Z jakiegoś powodu nie działa dla mnie:

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

errror to dostać jest „nie można zlokalizować obiektu metoda«setValue»via«pakietu XML :: libxml :: Element ...»

Odpowiedz

7

nie ma setValue metoda Node lub Element klas zobaczyć dokumenty dotyczące listy dostępnych metod. You może usunąć dzieci elementu i dołączyć nowy węzeł tekstowy li ke to:

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

Skąd otrzymałeś setValue? No obiekt ma taką metodę.

Ponadto element nie ma wartości, więc zdecydowanie nie można go ustawić.

"VAL1" jest wartością węzła potomnego elementu, text node.

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

Niestety, nie jest to całkowicie bezpieczne. Co się stanie, jeśli element ma wiele węzłów tekstowych? A co, jeśli w ogóle nie ma?

Bezpieczniejszym sposobem jest pobranie elementu, usunięcie wszystkich jego elementów potomnych, które są węzłami tekstowymi (co można łatwo zrobić poprzez usunięcie wszystkich jego węzłów potomnych) i dodanie nowego węzła tekstowego o pożądanej wartości.

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

Dzięki! To działa –

Powiązane problemy