加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – XML :: LibXML替换元素值

发布时间:2020-12-15 21:51:47 所属栏目:大数据 来源:网络整理
导读:我想替换xml文件中元素的“VAL1”值 出于某种原因,它对我不起作用: testingapplication_nameTEST/application_nameapplication_idVAL1/application_idapplication_password1234/application_password /testingmy $parser =XML::LibXML-new();$tree =$parser
我想替换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');

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读