2015-02-24 114 views
1

我對XML很陌生。我有一個包含大約8000個產品的XML文件,我將把這些產品導入到我自己的系統中。我想爲我的導入器修改這個XML文件。原始XML文件上的示例產品如下所示;如何更改XML元素的屬性

<product prodID="PD42BJ1000002020" prodName="Intermec PD42" prodBrand="INTERMEC" globProdID="PD42BJ1000002020"> 
    <tax>KDV18</tax> 
    <pic>http://.....jpg</pic> 
    <prodSpec> 
     <prd spec="Connectivity Interfaces" DEGER="USB - Serial RS232 - Ethernet"/> 
     <prd spec="Print Width" DEGER="104"/> 
     <prd spec="Printing Method" DEGER="Direct Thermal - Thermal Transfer"/> 
     <prd spec="Resolution (DPI)" DEGER="203"/> 
    </prodSpec> 
    </product> 

我想將產品規格更改爲如下的獨特元素;

<product prodID="PD42BJ1000002020" prodName="Intermec PD42" prodBrand="INTERMEC" globProdID="PD42BJ1000002020"> 
    <tax>KDV18</tax> 
    <pic>http://.....jpg</pic> 
     <pr001>Connectivity Interfaces:USB - Serial RS232 - Ethernet</pr001> 
     <pr002>Print Width:104</pr002> 
     <pr003>Printing Method:Direct Thermal - Thermal Transfer</pr003> 
     <pr004>Resolution (DPI):203</pr004> 
    </product> 

是否有可能像這樣更改整個XML文檔?

+0

你能provvide我們的TECHNOLOGIE(S)必須使用有任何線索(XSLT ,純編程語言,...)? – potame 2015-02-24 08:32:25

+0

嘿,謝謝你的回答!我將使用PHP導入XML到MySQL數據庫。需要的PHP代碼是不同的屬性集,如而不是。我對XML很陌生,所以我不知道XSLT:/ – 2015-02-24 09:07:34

+1

我不知道PHP,所以我不能幫你進一步。但是確實存在一些庫來處理XML - 我相信你可以在這裏找到一些有用的信息:https://stackoverflow.com/questions/tagged/xml+php – potame 2015-02-24 10:58:15

回答

2

如果你不介意使用Perl對於這一點,在這裏是一種使用XML::Twig做到這一點:

#!/usr/bin/perl 

use strict; 
use warnings; 

use XML::Twig; 

my $infile= shift @ARGV; 

XML::Twig->new(twig_handlers => { prodSpec => \&tweak_product }, 
       pretty_print => 'indented', 
      ) 
      ->parsefile($infile); 

exit; 

sub tweak_product 
    { my($t, $prodspec)= @_; 
    my $i=0;          # sub tag number 
    foreach my $prd ($prodspec->children('prd')) 
     { my $tag= sprintf('pr%03d', ++$i); 
     $prd->set_tag($tag) 
      ->set_text($prd->att('spec') . ':' . $prd->att('DEGER')) 
      ->del_atts; 
     } 
    $prodspec->erase; 
    $t->flush; 
    }