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>

更新: ファイルに出力するには、出力ファイルを開くための 1 行と、出力ファイルprintのファイルハンドルを引数として出力するメソッドの 2 つの変更を追加しました。

結果は次のとおりです。

#!/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 に答える