1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
   | #!/usr/bin/perl
use XML::Writer;
use IO::File;
 
my $output = new IO::File(">output.xml");
 
my $writer = new XML::Writer( 
    OUTPUT      => $output,
    DATA_INDENT => 3,             # indentation, trois espaces
    DATA_MODE   => 1,             # changement ligne.
    ENCODING    => 'utf-8',
);
 
 
my @tab = ("1 1 Chapter PURPOSE AND SCOPE OF THIS DOCUMENT (2420773) SectionID_3A13384E_8231_03d4_F7DC_7ECE6F383950",
			"1.3 1.3 section Filter algorithm (2407920) SectionID_F9561D84_6EBC_541f_D920_36E3994FA2E0",
			"1.4.3 1.4.3 section Shutdown Prevention (2587622) SectionID_C36D589D_5FFE_c735_AFE1_72125316EEB0",
			"2 2 Chapter Context (2636865) SectionID_BAA32D7A_DFAD_df85_1ACF_E75EE6BCCBB1",
			"2.1 2.1 section ASIL Level (2636867) SectionID_6E341872_E187_132e_E884_373E568CCBB8",
			"3 3 Chapter Name as Black Box (2407873) SectionID_37B79FED_A551_2aee_F18C_BBA600798308");
 
my $xmiId;
my $name;
my $bFinTag = 0;
my $nbTagOuvert = 1;
my @tabNumParagraphe;
my $numParagraphe = '';
my $numParagrapheOld = '';
 
$writer->xmlDecl("UTF-8");
 
 
$writer->startTag("xmi:XMI",
				"xmi:version" => "2.1",
				"xmlns:uml" => "http://schema.omg.org/spec/UML/2.1",
				"xmlns:xmi" => "http://schema.omg.org/spec/XMI/2.1",
				"xmlns:thecustomprofile" => "http://www.sparxsystems.com/profiles/thecustomprofile/1.0");
 
$writer->emptyTag("xmi:Documentation",
				"exporter" => "Enterprise Architect",
				"exporterVersion" => "6.5");
 
 
$writer->startTag("uml:Model",
				"xmi:type" => "uml:Model",
				"name" => "EA_Model",
				"visibility" => "public");
 
foreach(@tab){
	$ligne = $_;
 
	if($ligne =~ /(\d+(\.\d+)*)\s(.*)\sSectionID_(.*)/){
		$xmiId = $3;
		$name = $4;
		@tabNumParagraphe = split('\.',$1);
 
		$numParagraphe = $tabNumParagraphe[0];
 
		if(($numParagrapheOld ne '') and ($numParagraphe > $numParagrapheOld)){
			$bFinTag =1;
		}
 
		$numParagrapheOld = $numParagraphe;
 
	}
 
	if($bFinTag){
		$writer->endTag("packagedElement") ;
		$nbTagOuvert--;	
 
		for($i=1;$i<$nbTagOuvert;$i++){
			$writer->endTag("packagedElement");
			$nbTagOuvert--;	
		}	
		$bFinTag = 0;	
	}		
 
	$writer->startTag( "packagedElement", 
					"xmi:type" => "uml:Package", 
					"xmi:id" => "$xmiId", 
					"name" => "$name" );
 
	$nbTagOuvert++;
 
}
 
for($i=1;$i<$nbTagOuvert;$i++){
	$writer->endTag("packagedElement");
}	
 
$writer->endTag("uml:Model");
$writer->endTag("xmi:XMI");
$writer->end();
$output->close(); | 
Partager