2

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

输入 XML:

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

期望的输出结果:

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

我尝试过使用 XML Simple。

4

1 回答 1

3

使用模块的一种方式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>

更新:要打印到文件,我添加了两项修改,一行打开输出文件,以及将输出文件print的文件句柄作为参数打印的方法

结果是:

#!/usr/bin/env perl

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

die qq|Usage: perl $0 <input-xml> <output-xml>\n| unless @ARGV == 2;

open my $ofh, '>', pop or die qq|ERROR: Cannot open output file\n|;

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

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

        pretty_print => 'indented',

    )->parsefile( shift )->print( $ofh );
}

它的调用方式如下:

perl-5.14.2 script.pl xmlfile outfile
于 2013-01-15T15:12:24.017 回答