使用perl修改xml

使用perl修改xml,perl,xml-twig,Perl,Xml Twig,这是我的示例xml文件(weblogic应用程序部署计划的剪切版本) 但是,它不会将值更改为myTestEAR\u Modified。我做得不对吗?XML中的标记名是变量,而不是项目,请将其替换为条件(q{variable[string(name)…)它会起作用的。多谢了,米罗德,这确实是个问题。另外,我如何添加多个检查?例如,如果名称等于特征,将值设置为myTestEAR_Modified,如果名称等于Url,将值设置为UrlModified?您可以有几个条件,每个条件都有自己的处理程序,或者

这是我的示例xml文件(weblogic应用程序部署计划的剪切版本)


但是,它不会将值更改为myTestEAR\u Modified。我做得不对吗?

XML中的标记名是
变量
,而不是
项目
,请将其替换为条件(
q{variable[string(name)…
)它会起作用的。

多谢了,米罗德,这确实是个问题。另外,我如何添加多个检查?例如,如果名称等于特征,将值设置为myTestEAR_Modified,如果名称等于Url,将值设置为UrlModified?您可以有几个条件,每个条件都有自己的处理程序,或者只需设置一个处理程序即可变量,并根据名称更新值(在
$variable->first_child('value')
)(在
$variable->first_child('name')
)谢谢,我尝试了后者,效果很好。最后一个问题-我不想打印替换的xml,而是想在线编辑原始xml。这是怎么做到的?
<?xml version="1.0" encoding="UTF-8"?>
<deployment-plan>
  <application-name>ear-my-service</application-name>
  <variable-definition>
    <variable>
      <name>characteristics</name>
      <value>myTestEAR</value>
    </variable>
    <variable>
      <name>Url</name>
      <value>ABC</value>
    </variable>
    <variable>
      <name>time</name>
      <value>300</value>
    </variable>
  </variable-definition>
</deployment-plan>
#!/usr/bin/perl

use strict;
use warnings;
use XML::Twig;

my $data = shift ||die $!;

my $t= XML::Twig->new(
    twig_handlers => {
        q{project[string(name) =~ /\bcharacteristics\b/]/value} => \&value,
    },
    pretty_print => 'indented',
);
$t->parsefile( $data );
$t->print;

sub value {
    my ($twig, $value) = @_;
    $value->set_text("myTestEAR_Modified");
}