【发布时间】:2015-07-24 23:28:46
【问题描述】:
我需要将一个节点添加到一个已经存在的 xml 文件中,我的 xml 是这样的:-
<Install>
<version >
<number>6.1</number>
<build>1025654</build>
<path>path</path>
<kind>RIBS</kind>
</version>
</Install>
添加节点后应该是这样的
<Install>
<version >
<number>6.1</number>
<build>1025654</build>
<path>path</path>
<kind>native</kind>
</version>
<version >
<number>6.0</number>
<build>1025786</build>
<path>path</path>
<kind>native</kind>
</version>
</Install>
我从以下链接尝试了这个想法,但无法弄清楚。 using perl insert string xml to a node
我需要添加节点并将更改保存到文件中。 它应该反映在文件中。 我是 perl 的新手,为什么无法弄清楚。
我尝试的是:-
use strict;
use warnings;
use XML::Twig;
my $myXML
='<version>6.1</version>
<number>101445</number>
<path>path</path>
<kind>native</kind>
';
my $file = "C:\\Users\\bjoshi\\LightroomBuilds\\Win\\data.xml";
my $t= XML::Twig->new( twig_handlers => { grouping => sub { grouping( $myXML, @_); }, })
->parsefile( "$file") or die $!;
$t->print;
open my $xml_fh, '>', "$file" or die $!;
$t->set_pretty_print('indented_c');
$t->print($xml_fh);
exit;
sub grouping
{ my( $xml, $t, $grouping)= @_;
my $new_elt= XML::Twig::Elt->parse( $xml);
$new_elt->paste( last_child => $grouping);
}
我得到的输出是:-
<Install>
<version>
<number>6.1</number>
<build>1025654</build>
<path>path</path>
<kind>native</kind>
</version>
</Install>
【问题讨论】:
-
请展示您已经尝试过的内容。 Edit您的问题并在您链接的答案的帮助下输入您编写的代码。看起来答案应该适合你。
-
@simbabque 我已经编辑了添加我的代码的问题。
-
您的
$myXML不正确。将您给出的预期输出与您所做的进行比较。元素嵌套不正确。 -
@simbabque 我已经更新了 $myXML 但没有更新到 xml 文件。