【问题标题】:xml modification using perl使用perl修改xml
【发布时间】:2015-03-17 18:12:21
【问题描述】:

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

<?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");
}

但是,它不会将值更改为 myTestEAR_Modified。我做错了吗?

【问题讨论】:

    标签: perl xml-twig


    【解决方案1】:

    XML 中的标签名称是variable,而不是project,将其替换为条件(q{variable[string(name)...)即可。

    【讨论】:

    • 非常感谢,Mirod,这确实是问题所在。
    • 另外,我如何添加多个支票?例如,如果名称等于特征,则将值设置为 myTestEAR_Modified,如果名称等于 Url,则将值设置为 UrlModified?
    • 你可以有几个条件,每个条件都有自己的处理程序,或者只是在变量上设置一个处理程序,并根据名称($variable-&gt;first_child( 'name'))更新值($variable-&gt;first_child( 'value')
    • 谢谢,我试过后者,它奏效了。最后一个问题 - 我不想用替换打印 xml,而是想在线编辑原始 xml。怎么可能做到?
    猜你喜欢
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    • 2013-09-21
    • 1970-01-01
    • 2012-09-06
    • 2021-10-18
    • 2014-09-23
    • 1970-01-01
    相关资源
    最近更新 更多