Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl XML::LibXML替换元素值_Perl_Xml Libxml - Fatal编程技术网

Perl XML::LibXML替换元素值

Perl XML::LibXML替换元素值,perl,xml-libxml,Perl,Xml Libxml,我想替换xml文件中元素的“VAL1”值 出于某种原因,它对我不起作用: <testing> <application_name>TEST</application_name> <application_id>VAL1</application_id> <application_password>1234</application_password> </testing> my $par

我想替换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');    

试验
瓦尔1
1234
my$parser=XML::LibXML->new();
$tree=$parser->parse_文件($xml);
$root=$tree->getDocumentElement;
my($elem)=$root->findnodes('/testing/application_id');
$elem->setValue('VAL2');

错误是get是“无法通过包“XML::LibXML::Element…”找到对象方法“setValue”

在或类中没有
setValue
方法,有关可用方法的列表,请参阅文档。您可以删除元素的子元素并附加新的文本节点,如下所示:

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

你从哪里得到的
setValue
?没有对象有这样的方法

此外,元素没有值,因此绝对不能设置它

VAL1
”是元素的子节点a的值

不幸的是,这不是完全安全的。如果元素有多个文本子节点怎么办?如果它根本没有文本子节点怎么办

更安全的方法是抓取元素,删除其作为文本节点的所有子节点(这可以通过删除其所有子节点轻松完成),然后添加具有所需值的新文本节点

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