use strict; use warnings; use XML::LibXML; my $doc = XML::LibXML::Document->new( "1.0", "UTF-8" ); my $root = $doc->createElement("root"); $doc->setDocumentElement( $root ); while ( my $ident = ) { $ident =~ s/\A\.\.|:.*//gs; chomp( my $value = ); my $node = $doc->createElement($ident); $node->addChild($doc->createTextNode($value)); if ( $ident eq "p" ) { my $last = $root->lastChild; if ( $last->nodeName eq "con" ) { $last->addChild($node); } else { my $con = $doc->createElement("con"); $root->addChild($con); $con->addChild($node) } } else { $root->addChild($node); } } print $doc->serialize(1); __DATA__ ..DN: 1 ..id: 000044119 ..DD: Friday, October 30, 2009 ..p: THis is param1 ..p: THis is param2 ..p: THis is param3 ..DN: 2 ..id: 000044119 ..DD: Friday, October 30, 2009 ..p: THis is param1 ..p: THis is param2 ..p: THis is param3