需要更新将作为 Perl 脚本的输入给出的 xml 标签?

问题描述 投票:0回答:1

我计划编写一个脚本来更新 XML 标签值。

我的要求:

  1. 需要更改的标签值由用户选择。有时可能不止一个。
  2. 如果用户给定的标签在 XML 中不存在,脚本应该抛出错误。

我面临的第一个挑战是:要注意哪个 Perl 模块?我已经使用

XML::Twig
来更新一组标签(如何使用 XML::Twig 打印元素名称),但是 XML 标签名字被硬编码在脚本中。

但我当前的要求是从用户那里获取标签名称和要更新的值。

关于获取用户的输入,我有一个想法创建一个纯文本文件,用户可以在其中给出标签名称及其相应的值。脚本将解析文本文件并相应地选择标签及其值。这是一个好主意还是有更好的方法?

有人可以提一下这个要求吗?

这是一个简单的 XML 文件,如下所示:

<config>
  <tag1>alpha</tag1>
  <tag2>beta</tag2>
  <tag3>gamma</tag3>
</config>

(可能有很多类似的标签)

假设用户想要更新

tag2
并且他给出了
tag2
及其新值“beta 已更新”。然后脚本应首先检查
tag2
是否存在,如果存在,则应更新该值。

xml perl xml-parsing
1个回答
1
投票

首先,你的

xml
格式不正确。我已经修复了结束标签。你也应该在你的问题中这样做。

您可以使用

XML::Twig
模块解决此问题,使用参数之一作为
xpath
表达式:

#!/usr/bin/env perl

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

XML::Twig->new(
    twig_handlers => {
        $ARGV[0] => sub {
            $_->set_text( $ARGV[1] );
        }   
    },  
    pretty_print => 'indented',
)->parsefile( pop )->print;

第一个参数是要修改的标签,第二个参数是要替换的文本,第三个参数是输入文件,所以运行它如下:

perl script.pl tag2 "beta is updated" xmlfile

结果:

<config>
  <tag1>alpha</tag1>
  <tag2>beta is updated</tag2>
  <tag3>gamma</tag3>
</config>
© www.soinside.com 2019 - 2024. All rights reserved.