2013-01-15 138 views
2

我有一个嵌套的XML标记,需要在产品XML追加PF的外部ID Perl的XML编辑多注册标签嵌套

输入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。使用该模块XML::Twig

+1

关于在StackOverflow.com解析XML有很多问题,你有四处看看? – TLP

+0

是的,我环顾四周,也测试了其中很少。 – user1970783

+1

那么也许你应该选择最成功的那些测试,并询问为什么它不起作用。 – TLP

回答

3

的一种方式。

内容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> 

UPDATE:要打印到我已经添加了两个修改,一行打开输出文件的文件,以及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 
+0

谢谢Birei,我没有安装嫩枝和我的可用库XML ::的libxml,XML :: NamespaceSupport,XML解析器::,XML ::正则表达式,XML :: SAX,XML ::简单 – user1970783

+0

我已经安装了XML :: Twig可以在日志中看到结果,我们如何将结果写入文件? – user1970783

+0

'perl script.pl输入>输出'也许? – TLP