根据列表

时间:2017-02-21 08:46:15

标签: xml

我有一个包含多个字段的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>

1 个答案:

答案 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文件中指定了列表,那么代码就会简单得多。