Mirod, I'm testing with XML::Twig v3.15 on WinXP and v3.16 on Linux, both produce the same behavior.
Here is a minimal test stub that re-creates the formatting issue on my test machines.
#!/bin/perl -w
use strict;
use XML::Twig;
my $file = 'input.xml';
my $parser = new XML::Twig(KeepSpaces => 'true', ErrorContext => 2);
$parser->parsefile($file);
my $sc = $parser->root->first_child( q{ServerCluster[@Name="cl_app302_
+prod"]} );
my $ps = $sc->first_child('PrimaryServers');
$ps->cut_children;
$ps->insert_new_elt( Server => { Name => "New_1"});
$ps->insert_new_elt( Server => { Name => "New_2"});
open(PF, "> out.xml") or die "can't open file $!\n";
$parser->root->print(\*PF);
The input.xml file contains:
<?xml version="1.0" encoding="ISO-8859-1"?>
<Config ASDisableNagle="false" AcceptAllContent="false" IISDisableNagl
+e="false" IgnoreDNSFailures="false" RefreshInterval="60" ResponseChun
+kSize="64">
<Log LogLevel="Error" Name="/opt/IBMWebAS/logs/native.log"/>
<VirtualHostGroup Name="foobarcom">
<VirtualHost Name="foo.bar.com"/>
</VirtualHostGroup>
<ServerCluster CloneSeparatorChange="false" LoadBalance="Round Robi
+n" Name="cl_app302_prod" PostSizeLimit="-1" RemoveSpecialHeaders="tru
+e" RetryInterval="60">
<Server CloneID="umjbf6mv" ConnectTimeout="0" ExtendedHandshake=
+"false" LoadBalanceWeight="2" MaxConnections="-1" Name="swel3p_cl_app
+302_prod" WaitForContinue="false">
<Transport Hostname="swel3p.bar.com" Port="8132" Protocol="ht
+tp"/>
</Server>
<PrimaryServers>
<Server Name="swel3p_sg_app302_prod"/>
<Server Name="swel4p_sg_app302_prod"/>
<Server Name="swel1r_sg_app302_prod"/>
<Server Name="swel2r_sg_app302_prod"/>
</PrimaryServers>
</ServerCluster>
<!-- APP URI groups point at urls -->
<UriGroup Name="event/event.war_URIs">
<Uri AffinityCookie="JSESSIONID_302" Name="/event/*.jsp"/>
<Uri AffinityCookie="JSESSIONID_302" Name="/event/ThreadedEven
+tServlet"/>
</UriGroup>
<!-- Route statement bring it all together -->
<Route ServerCluster="cl_app302_prod" UriGroup="event/event.war_URI
+s" VirtualHostGroup="foobarcom"/>
</Config>
Which on my systems produces:
<Config ASDisableNagle="false" AcceptAllContent="false" IISDisableNagl
+e="false" IgnoreDNSFailures="false" RefreshInterval="60" ResponseChun
+kSize="64">
<Log LogLevel="Error" Name="/opt/IBMWebAS/logs/native.log"/>
<VirtualHostGroup Name="foobarcom">
<VirtualHost Name="foo.bar.com"/>
</VirtualHostGroup>
<ServerCluster CloneSeparatorChange="false" LoadBalance="Round Robi
+n" Name="cl_app302_prod" PostSizeLimit="-1" RemoveSpecialHeaders="tru
+e" RetryInterval="60">
<Server CloneID="umjbf6mv" ConnectTimeout="0" ExtendedHandshake=
+"false" LoadBalanceWeight="2" MaxConnections="-1" Name="swel3p_cl_app
+302_prod" WaitForContinue="false">
<Transport Hostname="swel3p.bar.com" Port="8132" Protocol="ht
+tp"/>
</Server>
<PrimaryServers><Server Name="New_2"/><Server Name="New_1"/></Pr
+imaryServers>
</ServerCluster>
<!-- APP URI groups point at urls -->
<UriGroup Name="event/event.war_URIs">
<Uri AffinityCookie="JSESSIONID_302" Name="/event/*.jsp"/>
<Uri AffinityCookie="JSESSIONID_302" Name="/event/ThreadedEven
+tServlet"/>
</UriGroup>
<!-- Route statement bring it all together -->
<Route ServerCluster="cl_app302_prod" UriGroup="event/event.war_URI
+s" VirtualHostGroup="foobarcom"/>
</Config>
-Nitrox