這裏枝條更新XML文件是我的問題,我需要使用另一個XMLPerl的XML ::另一個XML
data.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>
Data2.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);
的employeenumber是唯一的,我寫data2.xml的每一個元素在一個新的文件,以及i每employeenumbers存儲在數組中。然後我解析data.xml並寫入每個元素,除非它存在於數組中。
這種方法根本沒有效率。所以,而不是重寫所有的data.xml,我想刪除數組中存在的data.xml中的每個元素(並因此在data2.xml中)。然後將data2.xml中的元素添加到data.xml中
我的問題是我找不到使用XML Twig從xml文件中刪除元素的方法。
有沒有人有任何想法?
在此先感謝,
Simon。
小枝具有刪除元素的「刪除」方法。 – toolic