我想替换xml文件中元素的“VAL1”值
出于某种原因,它对我不起作用:
<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');
错误是get是“无法找到对象方法”setValue“via package”XML :: LibXML :: Element …“
解决方法
你从哪里得到setValue?没有
XML::LibXML对象有这样的方法.
此外,元素没有值,所以你绝对不能设置它.
“VAL1”是元素子节点的值,即text node.
my ($application_id_text) = $root->findnodes('/testing/application_id/text()'); $application_id_text->setData('VAL2');
不幸的是,这不是完全安全的.如果元素有多个文本子节点怎么办?如果没有任何东西怎么办?
更安全的方法是获取元素,删除所有作为文本节点的子节点(可以通过删除其所有子节点轻松完成),并添加具有所需值的新文本节点.
my ($application_id_node) = $root->findnodes('/testing/application_id'); $application_id_node->removeChildNodes(); $application_id_node->appendText('VAL2');