10

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

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

4

2 回答 2

22

元素没有值,所以它没有setValue方法。

" VAL1" 是元素的子节点的值,一个文本节点

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');
于 2011-12-07T08:06:40.517 回答
8

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

$elem->removeChildNodes();
$elem->appendText('VAL2');
于 2011-12-07T07:46:46.023 回答