我正在使用以下格式的XML文件:
<Principal ID="122" >
<Status Fees="${Fees}"/>
</Principal>
<Principal ID="123" >
<Status Fees="${Fees}"/>
</Principal>
<Principal ID="124" >
<Status Fees="${Fees}"/>
</Principal>
<Principal ID="125" >
<Status Fees="${Fees}"/>
</Principal>
我需要使用Fees1,Fees2,Fees3等更新${Fees}
变量。有超过365条记录。
有人可以通过Perl或Python帮助我如何做到这一点吗?
答案 0 :(得分:0)
使用正则表达式进行xml操作并不是一个好主意,但在这种情况下我还会使用它:
Perl脚本:
my $xml = join (/\n/, <main::DATA>);
my @fees = (1, 2, 3, 4);
$xml =~ s/(<Status Fees=")\${Fees}("\/>)/{$1 . shift(@fees) . $2}/ige;
print "$xml";
__DATA__
<Principal ID="122" >
<Status Fees="${Fees}"/>
</Principal>
<Principal ID="123" >
<Status Fees="${Fees}"/>
</Principal>
<Principal ID="124" >
<Status Fees="${Fees}"/>
</Principal>
<Principal ID="125" >
<Status Fees="${Fees}"/>
</Principal>
的输出:强> 的
<Principal ID="122" >
<Status Fees="1"/>
</Principal>
<Principal ID="123" >
<Status Fees="2"/>
</Principal>
<Principal ID="124" >
<Status Fees="3"/>
</Principal>
<Principal ID="125" >
<Status Fees="4"/>
</Principal>
查看并测试here。
如果您想将${Fees}
替换为$Fees
变量的实际值并更改此变量的名称,请转到:
Perl脚本:
my $xml = join (/\n/, <main::DATA>);
my ($fee1, $fee2, $fee3, $fee4) = (1, 2, 3, 4);
$xml =~ s/(<Status Fees=")\${(.*?)}("\/>)/{$1 . eval('$'.$2) . $3}/ige;
print "$xml";
__DATA__
<Principal ID="122" >
<Status Fees="${fee1}"/>
</Principal>
<Principal ID="123" >
<Status Fees="${fee2}"/>
</Principal>
<Principal ID="124" >
<Status Fees="${fee3}"/>
</Principal>
<Principal ID="125" >
<Status Fees="${fee4}"/>
</Principal>
的输出:强> 的
<Principal ID="122" >
<Status Fees="1"/>
</Principal>
<Principal ID="123" >
<Status Fees="2"/>
</Principal>
<Principal ID="124" >
<Status Fees="3"/>
</Principal>
<Principal ID="125" >
<Status Fees="4"/>
</Principal>
查看并测试here。
答案 1 :(得分:0)
简短的Python版本。相当低效,但在365个条目上运行即时。
xml = open("INPUT.XML","rb").read()
count = 1
while "${Fees}" in xml:
xml = xml.replace("${Fees}", "Fees%d"%count, 1)
count += 1
open("OUTPUT.XML","wb").write(xml)