这是我的问题,我需要使用另一个 xml 更新一个 xml 文件
数据.xml:
<?xml version='1.0'?>
<employees>
<employee>
<employeenumber>V0000001</employeenumber>
<name>John Doe</name>
<age>43</age>
<sex>M</sex>
<department>Operations</department>
</employee>
<employee>
<employeenumber>V0000002</employeenumber>
<name>Jane Doe</name>
<age>35</age>
<sex>F</sex>
<department>Operations</department>
</employee>
<employee>
<employeenumber>V0000003</employeenumber>
<name>Jane Doe</name>
<age>35</age>
<sex>F</sex>
<department>Operations</department>
</employee>
<employee>
<employeenumber>V0000004</employeenumber>
<name>Jane Doe</name>
<age>35</age>
<sex>F</sex>
<department>Operations</department>
</employee>
<employee>
<employeenumber>V0000005</employeenumber>
<name>Jane Doe</name>
<age>35</age>
<sex>F</sex>
<department>Operations</department>
</employee>
</employees>
数据2.xml:
<?xml version='1.0'?>
<employees>
<employee>
<employeenumber>V0000002</employeenumber>
<name>Jane Doe</name>
<age>34</age>
<sex>F</sex>
<department>Management</department>
</employee>
<employee>
<employeenumber>V0000004</employeenumber>
<name>Jane Doe</name>
<age>34</age>
<sex>F</sex>
<department>Sales</department>
</employee>
</employees>
所以我需要用 Data2.xml 中的信息更新 Data.xml。
我已经编写了这段代码,它可以工作,但需要 6 小时才能执行,Data.xml 相当大(250mo)。
use XML::Twig;
my %soi = ();
open(FILE,">out.txt");
my $diff= XML::Twig->new( pretty_print => 'indented',
twig_handlers =>
{ 'employees/employee' => \&stock_n_purge,}
)
->parsefile( 'data2.xml');
sub stock_n_purge
{
my( $diff, $elt)= @_;
$soi{$elt->first_child ("employeenumber")->text} = "1"; # stock l'element dans un tableau
$diff->print(\*FILE);
printf "Found One";
$diff->purge;# frees the memory
}
my $full= XML::Twig->new( pretty_print => 'indented',
twig_handlers =>
{ 'employees/employee' => \&stock_n_purge2,}
)
->parsefile( 'data.xml');
sub stock_n_purge2
{
my( $diff2, $elt2)= @_;
$diff2->print(\*FILE) unless (exists( $soi{$elt2->first_child ("employeenumber")->text} ));
$diff2->purge; # frees the memory
}
close(FILE);
员工编号是唯一的,我将 data2.xml 的每个元素写入一个新文件,并将每个员工编号存储在一个数组中。然后我解析 data.xml 并写入每个元素,除非它存在于数组中。
这种方法根本没有效率。因此,我不想重写所有 data.xml,而是想从 data.xml 中删除数组中存在的每个元素(因此在 data2.xml 中)。然后将 data2.xml 中的元素附加到 data.xml
我的问题是我找不到使用 XML Twig 从 xml 文件中删除元素的方法。
有人有什么想法吗?
提前致谢,
西蒙。