data.xml中Perl中,刪除XML節點
<people>
<person name="John">
<param name="age" value="21" />
</person>
<person name="Jane">
<param name="age" value="25" />
</person>
</people>
我有這個片XML的。我正在編寫腳本以將<person>
節點附加到<people>
節點。我正在使用XML :: Simple
(請不要建議我使用另一個庫,我知道它的困難)。
my $remove_person = "Jane";
my $xml = XMLin('data.xml', ForceArray => 1, KeepRoot => 1, KeyAttr => []);
if(exists $xml->{people}[0]{person}){
my $var = $xml->{people}[0]{person};
my $count = @$var;
my $person_index = 0;
for(my $i = 0; $i < $count; $i++){
if($xml->{people}[0]{person}[$i]->{name} eq $remove_person){
print "Person found at " . $person_index . " index";
$person_index = $i;
$person_to_remove = $xml->{people}[0]{person}[$i];
}
}
} else {
print "Person not found in data.xml\r";
}
上面一段代碼給我我要刪除的節點的索引。 它從這一點,我有我的麻煩。我無法找到從數據中刪除此索引的正確方法。
到目前爲止,我已經嘗試過一種使用splice
的方法,它返回了我想要刪除的XML部分,然後我使用XMLout()
將該數組轉換回XML。使用=~ s///g
,我能夠編輯節點更改(<person>
成爲<opt>
)。一旦我想XMLout()'ed
原來的data.xml結構,我試圖用原始結構的空字符串替換XML的可移動部分的變量。
顯然,這沒有奏效。
如何我會刪除XML的這一部分,或者通過陣列數據刪除,或純文本文件清除,以寫回原來的data.xml文件的新結構?
刪除功能,建議不要使用(具有諷刺意味的在我的情況下,其在石頭上所寫的,我使用::簡單)。我的問題的最終產品是一個電話系統腳本,沒有,系統無法運行。如果提供了正確的索引檢查,我是否可以假設使用delete不會導致perl文檔中警告的任何'意外行爲'? (我已經對:: Simple有足夠的難度,所以我寧願減少任何額外的難度/風險) –
@Simon。 'delete'不應該用於數組。我用它來做一個好的散列。 – choroba