用于多寄存器嵌套标记的Perl XML编辑

用于多寄存器嵌套标记的Perl XML编辑,perl,xml-parsing,Perl,Xml Parsing,我有一个嵌套的XML标记,需要在产品XML中为ExternalId追加PF 输入XML: <Products> <Product> <ExternalId>317851</ExternalId> </Product> <Product> <ExternalId>316232</ExternalId> </Product> &l

我有一个嵌套的XML标记,需要在产品XML中为ExternalId追加PF

输入XML:

<Products>
    <Product>
      <ExternalId>317851</ExternalId>
    </Product>
    <Product>
      <ExternalId>316232</ExternalId>
    </Product>
    <Product>
      <ExternalId>13472</ExternalId>
    </Product>
</Products>

317851
316232
13472
期望输出结果:

   <Products>
        <Product>
          <ExternalId>PF317851</ExternalId>
        </Product>
        <Product>
          <ExternalId>PF316232</ExternalId>
        </Product>
        <Product>
          <ExternalId>PF13472</ExternalId>
        </Product>
    </Products>

PF317851
PF316232
PF13472

我尝试过使用XML Simple。

单向使用模块
XML::Twig

script.pl的内容

#!/usr/bin/env perl

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

{
    my $twig = XML::Twig->new( 

        twig_handlers => {
            'Product/ExternalId' => sub {
                $_->prefix( 'PF' );
            }   
        },  

        pretty_print => 'indented',

    )->parsefile( shift )->print;
}
像这样运行:

perl-5.14.2 script.pl xmlfile
这将产生:

<Products>                                                                                                                                                                                                                                   
  <Product>                                                                                                                                                                                                                                  
    <ExternalId>PF317851</ExternalId>                                                                                                                                                                                                        
  </Product>                                                                                                                                                                                                                                 
  <Product>                                                                                                                                                                                                                                  
    <ExternalId>PF316232</ExternalId>                                                                                                                                                                                                        
  </Product>
  <Product>
    <ExternalId>PF13472</ExternalId>
  </Product>
</Products>
它的调用方式如下:

perl-5.14.2 script.pl xmlfile outfile

在StackOverflow.com上解析XML有很多问题,你看了吗?是的,我也看了很多,并测试了其中的一些。然后,也许你应该使用这些测试中最成功的一个,并询问为什么它不起作用。我试过下面的链接(如我的数组)并按照下面的链接输出。XML保持不变,无法看到ExteralId值的变化。感谢Birei,我没有安装Twig,我的可用库是XML::LibXML、XML::NamespaceSupport、XML::Parser、XML::RegExp、XML::SAX、XML::SimpleI安装了XML::Twig,可以在日志中看到结果,我们如何将结果写入文件?
perl script.pl input>output
也许?我尝试过并收到一个警告(在无效上下文中无用地使用数值gt(>),我可以看到输出正在写入日志文件,但没有写入日志文件file@user1970783:我认为@TLP意味着从shell运行该命令。退出
perl
脚本。
perl-5.14.2 script.pl xmlfile outfile