我有一个包含多个字段的XML文件。 其中一个字段是参考编号(唯一)。 另一个字段是profile-id(非唯一),对于所有列表总是相同的。
另外,我有一个参考编号列表及其profile-id(在excel文件中)。 我想要做的是自动匹配引用号字段,并根据列表更改xml中的profile-id字段,以便生成的xml将具有正确的参考号列表及其各自的profile-id来自列表而不是他们现在拥有的一般相同的配置文件。
这可能吗?
在下面的示例中:z303-profile-id字段对于两个顾客都是相同的,每个顾客在z303-ref中都有一个唯一的标识符,前者在列表中根据后者进行更改。
谢谢。
示例:
<patron-record>
<z303>
<z303-ref>000018804</z303-ref>
<z303-profile-id>USE_MSL</z303-profile-id>
</z303>
</patron-record>
<patron-record>
<z303>
<z303-ref>000018867</z303-ref>
<z303-profile-id>USE_MSL</z303-profile-id>
</z303>
</patron-record>
列表:
000018804 full staff
000018867 Tester
结果:
<patron-record>
<z303>
<z303-ref>000018804</z303-ref>
<z303-profile-id>full staff</z303-profile-id>
</z303>
</patron-record>
<patron-record>
<z303>
<z303-ref>000018867</z303-ref>
<z303-profile-id>Tester</z303-profile-id>
</z303>
</patron-record>
答案 0 :(得分:2)
以下是您在xsh中执行此操作的方法,这是我碰巧维护的工具:
perl {
open my $LST, '<', shift or die $!;
while (<$LST>) {
chomp;
my ($ref, $id) = split ' ', $_, 2;
$profile_id->{$ref} = $id;
}
} ;
open { shift };
for //patron-record/z303 {
my $new_id = xsh:lookup('profile_id', z303-ref) ;
if $new_id set z303-profile-id $new_id ;
}
save :b ;
呼叫
xsh -al script.xsh file.lst file.xml
如果您在XML文件中指定了列表,那么代码就会简单得多。