2011-05-26 32 views
3

我有一個XML文件,如下所示:添加和元素在XML文件中的Perl

<root> 
<element1>abc</element1> 
<element2>123</element2> 
<element3>456</element3> 
</root> 

我試圖使用XML在Perl中添加和元素4:DOM

use XML::DOM; 

#parse the file 
my $parser = new XML::DOM::Parser; 
my $doc = $parser->parsefile ("mytest.xml"); 
my $root = $doc->getDocumentElement(); 

my $new_element= $doc->createElement("element4"); 
my $new_element_text= $doc->createTextNode('testing'); 
$new_element->appendChild($new_element_text); 

$root->appendChild($new_element); 

我得到錯誤: 「未定義子程序& XML ::的libxml ::元:: getNodeType」

我試圖insetBefore方法,通過找到元素,並試圖THA之前將其插入噸。

任何指針,我做錯了什麼?

+0

爲什麼不還提到,在這行中的出錯是? – TLP 2011-05-27 00:05:45

回答

6

XML::DOM似乎是在2000年的最後更新,這意味着它不是很受支持的模塊。它看起來像XML::LibXML提供了非常類似的界面,看到工作示例如下:

use XML::LibXML; 

my $parser = XML::LibXML->new; 
my $doc = $parser->parse_file("mytest.xml"); 
my $root = $doc->getDocumentElement(); 

my $new_element= $doc->createElement("element4"); 
$new_element->appendText('testing'); 

$root->appendChild($new_element); 

print $root->toString(1); 
+0

謝謝bvr。 LibXml爲我工作沒有任何問題。我想我應該停止使用XML:DOM – Ven 2011-05-31 18:05:29

0

它對我來說很好,並沒有讀取XML :: LibXML(它使用XML :: Parser :: Expat)。 我安裝了XML :: DOM版本1.44。

當然,你可以嘗試安裝XML :: LibXML,看看是否解決了這個問題。

+0

謝謝Seth。 LibXML爲我工作 – Ven 2011-05-31 18:06:27

0

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

use XML::Simple; 

my $xml = XMLin('mytest.xml', ForceArray => 1); 
$xml->{element4} = ['789']; 
open(XML, '>mytest_out.xml'); 
binmode(XML, ":utf8"); 
print XML '<?xml version="1.0" encoding="UTF-8"?>'."\n".XMLout($xml, RootName => 'root'); 
close XML;