Comment parser fichier XMI
Bonjour à tous,
Je travaille actuellement sur un projet et j'ai besoin de parcourir un fichier XMI (exporté de ArgoUML).
Voici le début de mon fichier XMI:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <?xml version = '1.0' encoding = 'UTF-8' ?>
<XMI xmi.version = '1.2' xmlns:UML = 'org.omg.xmi.namespace.UML' timestamp = 'Sun Nov 18 17:50:27 GMT 2012'>
<XMI.header> <XMI.documentation>
<XMI.exporter>ArgoUML (using Netbeans XMI Writer version 1.0)</XMI.exporter>
<XMI.exporterVersion>0.34(6) revised on $Date: 2010-01-11 22:20:14 +0100 (Mon, 11 Jan 2010) $ </XMI.exporterVersion>
</XMI.documentation>
<XMI.metamodel xmi.name="UML" xmi.version="1.4"/></XMI.header>
<XMI.content>
<UML:Model xmi.id = '127-0-1-1--249a68fe:13b14925ffa:-8000:0000000000000A5D'
name = 'untitledModel' isSpecification = 'false' isRoot = 'false' isLeaf = 'false'
isAbstract = 'false'>
<UML:Namespace.ownedElement>
<UML:Package xmi.id = '127-0-1-1--249a68fe:13b14925ffa:-8000:0000000000000A5E'
name = 'Controllers' isSpecification = 'false' isRoot = 'false' isLeaf = 'false'
isAbstract = 'false'/>
<UML:Class xmi.id = '127-0-1-1--249a68fe:13b14925ffa:-8000:0000000000000A5F'
name = 'FileController' visibility = 'public' isSpecification = 'false'
isRoot = 'false' isLeaf = 'false' isAbstract = 'false' isActive = 'false'> |
J'utilise Jdom pour accéder aux différents éléments. J'arrive à accéder à l'élément XMI.content mais pas aux éléments commençant par "UML:Xxxxx".
Voici ma classe:
Code:
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
| package models;
import java.io.*;
import org.jdom2.*;
import org.jdom2.input.*;
import org.jdom2.filter.*;
import java.util.List;
import java.util.Iterator;
public class ImportXMI {
static org.jdom2.Document document;
static Element root;
public ImportXMI(File xmiFile){
SAXBuilder sxb = new SAXBuilder();
try
{
//On crée un nouveau document JDOM avec en argument le fichier XML
//Le parsing est terminé ;)
document = sxb.build(xmiFile);
}
catch(Exception e){System.out.println(e.getMessage());}
//On initialise un nouvel élément racine avec l'élément racine du document.
root = document.getRootElement();
//Méthode définie dans la partie 3.2. de cet article
afficheALL();
}
//Ajouter cette méthodes à la classe JDOM2
static void afficheALL()
{
System.out.println("Affichage de la liste:");
Namespace ns = Namespace.getNamespace("UML", "org.omg.xmi.namespace.UML");
List<Element> xmiContent = root.getChildren("XMI.content");//Retourne l'élément XMI.content
List<Element> xmiClass = root.getChildren("UML:Class");//Retourne une liste vide...
List<Element> xmiClass2 = root.getChildren("UML:Class", ns);//Retourne une liste vide...
List<Element> xmiClass3 = root.getChildren("Class", ns);//Retourne une liste vide...
for(int i=0; i<xmiClass.size(); i++){
System.out.println(i + xmiContent.get(i).getName());
}
}
} |
Sur beaucoup de forums j'ai cru comprendre que ce serait un problème de namespace?
J'ai pourtant récupéré le namespace dans mon code mais cela n'a rien changé.
Merci d'avance