如果我说英语不好,我会提前道歉,我是意大利学生。
我的问题是:
我想在XML文件中插入一个新的admin
元素并保存结果。
例如,我想从这开始:
<admins>
<admin>
<mail>admin@admin.it</mail>
<password>admin</password>
<user>admin</user>
</admin>
</admins>
我想要的输出是:
<admins>
<admin>
<mail>admin@admin.it</mail>
<password>admin</password>
<user>admin</user>
</admin>
<admin>
<mail>master@uni.it</mail>
<password>master</password>
<user>master</user>
</admin>
</admins>
我该怎么做?
我尝试了各种方法,但都没有给出好的结果。
我尝试了XML::LibXML
,例如:
use XML::LibXML;
my $parser = XML::LibXML->new;
my $doc = $parser->parse_file("prova.xml");
my $root = $doc->getDocumentElement();
my $new_element= $doc->createElement("element4");
$new_element->appendText('testing');
$root->appendChild($new_element);
print $root->toString(1);
我可以添加元素,但只能在本地添加,我无法将新项保存在文件中。
答案 0 :(得分:2)
有几种方法可以做到这一点,但是你自己的解决方案似乎只缺少文件的输出。
此程序显示如何从文本字符串添加一大块XML,并将结果打印到prova_new.xml
。
use strict;
use warnings;
use XML::LibXML;
my $parser = XML::LibXML->new;
my $doc = $parser->parse_file('prova.xml');
my $admins = $doc->getDocumentElement;
$admins->appendWellBalancedChunk(<<'END');
<admin>
<mail>master@uni.it</mail>
<password>master</password>
<user>master</user>
</admin>
END
open my $out, '>', 'prova_new.xml' or die $!;
print $out $doc->toString(1);
<强>输出强>
<?xml version="1.0"?>
<admins>
<admin>
<mail>admin@admin.it</mail>
<password>admin</password>
<user>admin</user>
</admin>
<admin>
<mail>master@uni.it</mail>
<password>master</password>
<user>master</user>
</admin>
</admins>
答案 1 :(得分:0)
我认为最简单的方法是使用XML :: Simple
use XML::Simple;
my $xml = XMLin('prova.xml', ForceArray => 1);
my $newAdmin = {mail => ['master@uni.it'], password => ['master'], user => ['master']};
push(@{$xml->{admin}}, $newAdmin);
open(XML, '>prova_new.xml');
binmode(XML, ":utf8");
print XML '<?xml version="1.0" encoding="UTF-8"?>'."\n".XMLout($xml, RootName => 'admins');
close XML;