2013-01-15 180 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