2014-02-22 121 views
1

如果我的英語說得不好,我很抱歉,我是意大利學生。在XML文件中添加元素

我的問題是:

我想插入一個XML文件中的新元素admin並保存結果。

例如,我想這個開始:

<admins> 
    <admin> 
    <mail>[email protected]</mail> 
    <password>admin</password> 
    <user>admin</user> 
    </admin> 
</admins> 

和我想要的輸出是:

<admins> 
    <admin> 
    <mail>[email protected]</mail> 
    <password>admin</password> 
    <user>admin</user> 
    </admin> 
    <admin> 
    <mail>[email protected]</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); 

我可以添加一個元素,但只能在本地,我無法保存文件中的新項目。

+4

你能告訴我們你已經嘗試過(例如,使用XML解析器如[XML :: LibXML](https://metacpan.org/pod/XML::LibXML))?我們很樂意提供幫助,但我們不會爲您編寫代碼。 – amon

+0

我嘗試了各種方法,但沒有人給出好的結果......我嘗試過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);我可以添加一個元素,但只能在本地,我無法將新項目保存在文件中... – user3340877

+0

@ user3340877請更新您的問題,而不是在評論中放置大量代碼,這很難閱讀。 –

回答

0

我認爲這樣做最簡單的方法是使用XML ::簡單

use XML::Simple; 

my $xml = XMLin('prova.xml', ForceArray => 1); 
my $newAdmin = {mail => ['[email protected]'], 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; 
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>[email protected]</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>[email protected]</mail> 
    <password>admin</password> 
    <user>admin</user> 
    </admin> 
    <admin> 
    <mail>[email protected]</mail> 
    <password>master</password> 
    <user>master</user> 
    </admin> 
</admins> 
+0

我試過這個解決方案,但不幸的是有一個問題,讓我只是添加一個新元素,但如果我再次嘗試添加另一個元素,最後一個元素將替換以前的元素。 – user3340877

+0

我無法想象你做了什麼。如果我複製'appendWellBalancedChunk'調用,然後我添加另一個元素。 – Borodin