[java] Parser un fichier XML

Parser un fichier XML [java] - Java - Programmation

Marsh Posté le 08-02-2006 à 21:48:57    

Bonjour!
J'aimerais parser ce fichier XML sous Java, j'utilise nanoXML, mais je suis prêt à utiliser d'autres bibliothèques si cette solution est plus simple.

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <Permissions>
  3. <Permission id="1">
  4.  <Roles>
  5.   <id>1</id>
  6.   <id>2</id>
  7.   <id>3</id>
  8.  </Roles>
  9.  <Objets>
  10.   <id>101</id>
  11.   <id>102</id>
  12.   <id>103</id>
  13.  </Objets>
  14.  <Methodes>
  15.   <Methode id="1" idObjet="101">
  16.    <Composants>
  17.     <Composant Forme="Rectangle" Methode="Flou" Coeff="5" xDep="50" yDep="50" xFin="200" yFin="375"></Composant>
  18.     <Composant Forme="Rectangle" Methode="Flou" Coeff="5" xDep="350" yDep="70" xFin="500" yFin="300"></Composant>
  19.    </Composants>
  20.   </Methode>
  21.  </Methodes>
  22. </Permission>
  23. <Permission id="2">
  24.  <Roles>
  25.   <id>1</id>
  26.  </Roles>
  27.  <Objets>
  28.   <id>104</id>
  29.  </Objets>
  30.  <Methodes>
  31.   <Methode id="1" idObjet="104">
  32.    <Composants>
  33.     <Composant Forme="Rectangle" Methode="Flou" Coeff="5" xDep="50" yDep="50" xFin="200" yFin="375"></Composant>
  34.     <Composant Forme="Rectangle" Methode="Flou" Coeff="5" xDep="350" yDep="70" xFin="500" yFin="300"></Composant>
  35.    </Composants>
  36.   </Methode>
  37.  </Methodes>
  38. </Permission>
  39. </Permissions>


 
Le but étant d'avoir au final, la création de deux classes "Permission" contenant un tableau d'entiers avec l'Id des rôles, un tableau avec l'id des objets, et un tableau d'objets de type "Méthode". Pour l'instant je suis perdu dans les énumérations et les getContent/getAttribute, etc.. Je cherche en fait une méthode clair pour savoir à quel endroit je me trouve dans l'epxloration de mon fichier XML, et donc pouvoir envoyer plus facilement les données dans les classes qui vont bien :)
 
Merci d'avance!

Reply

Marsh Posté le 08-02-2006 à 21:48:57   

Reply

Marsh Posté le 08-02-2006 à 22:09:22    

ton truc peut se faire facilement avec du parsing SAX si ca se limite vraiment à ça.
 
Tu peux aussi regarder du côté des XPath : ca facilite énormément la navigation dans un document DOM
 
je te laisse googler

Reply

Marsh Posté le 08-02-2006 à 22:45:51    

Ok je te remercie. Parallèlement j'ai étudié un peu nano XML et j'arrive à parser ça comme je l'entends. Pour le moment j'affiche dans la console qqch de type:

Code :
  1. Permission n°1
  2. Roles ayant la permission
  3. 1
  4. 2
  5. 3
  6. Permission appliquée aux objets
  7. 101
  8. 102
  9. 103
  10. Méthode détectée: id=1 et appliquée sur l'objet 101
  11. Nouveau Composant:
  12. Forme: Rectangulaire Méthode de traitement: Flou avec force 5
  13. Coordonnées (xDep, yDep, xFin, yFin):
  14. 50, 50, 200, 375
  15. Nouveau Composant:
  16. Forme: Rectangulaire Méthode de traitement: Flou avec force 5
  17. Coordonnées (xDep, yDep, xFin, yFin):
  18. 350, 70, 500, 300


 
Par contre niveau code, c'est pas très explicite :D :

Code :
  1. void getPermissions(){
  2.        
  3.         Enumeration enumeration=xml.enumerateChildren();
  4.         //On déclare un tableau de formes
  5.         ArrayList TabForme=new ArrayList();
  6.         //System.out.println(xml);
  7.        
  8.         //Navigation dans les fils XML
  9.         while (enumeration.hasMoreElements()) {
  10.             //Déclaration des variables
  11.             //Déclaration d'un nouveau XMLElement qui représente lengthsecond niveau du fichier xml
  12.             XMLElement xml2 = (XMLElement) enumeration.nextElement();
  13.             System.out.print("Permission n°" );
  14.             System.out.println(xml2.getAttribute("ID" ));
  15.             Enumeration enumPerm=xml2.enumerateChildren();
  16.            
  17.             while (enumPerm.hasMoreElements()) {
  18.                 String BaliseCourante;
  19.                 XMLElement xml3 = (XMLElement) enumPerm.nextElement();
  20.                 Enumeration enum2=xml3.enumerateChildren();
  21.                 BaliseCourante=xml3.getName();
  22.                
  23.                 if(BaliseCourante.equals("Roles" ))
  24.                     System.out.println("Roles ayant la permission" );
  25.                 if(BaliseCourante.equals("Objets" ))
  26.                     System.out.println("Permission appliquée aux objets" );
  27.                
  28.                 while (enum2.hasMoreElements()) {
  29.                     XMLElement xml4 = (XMLElement) enum2.nextElement();
  30.                    
  31.                     System.out.println(xml4.getContent());
  32.                    
  33.                     Enumeration enum3=xml4.enumerateChildren();
  34.                    
  35.                     while (enum3.hasMoreElements()) {
  36.                         System.out.print("Méthode détectée: id=" );
  37.                         System.out.print(xml4.getAttribute("Id" ));
  38.                         System.out.print(" et appliquée sur l'objet " );
  39.                         System.out.println(xml4.getAttribute("IdObjet" ));
  40.                        
  41.                         XMLElement xml5 = (XMLElement) enum3.nextElement();
  42.                        
  43.                         Enumeration enum4=xml5.enumerateChildren();
  44.                        
  45.                         while (enum4.hasMoreElements()) {
  46.                             XMLElement xml6 = (XMLElement) enum4.nextElement();
  47.                            
  48.                             System.out.println("Nouveau Composant:" );
  49.                             System.out.print("Forme: " );
  50.                            
  51.                            
  52.                             if(xml6.getAttribute("Forme" ).equals("Rectangle" )){
  53.                                 System.out.print("Rectangulaire " );
  54.                             }else if(xml6.getAttribute("Forme" ).equals("Cercle" )){
  55.                                 System.out.print("Circulaire " );
  56.                             }
  57.                            
  58.                             System.out.print("Méthode de traitement: " );
  59.                             System.out.print(xml6.getAttribute("Methode" ));
  60.                             System.out.print(" avec force " );
  61.                             System.out.println(xml6.getAttribute("Coeff" ));
  62.                            
  63.                             System.out.println("Coordonnées (xDep, yDep, xFin, yFin): " );
  64.                            
  65.                             System.out.print(xml6.getAttribute("xDep" ));
  66.                             System.out.print(", " );
  67.                             System.out.print(xml6.getAttribute("yDep" ));
  68.                             System.out.print(", " );
  69.                             System.out.print(xml6.getAttribute("xFin" ));
  70.                             System.out.print(", " );
  71.                             System.out.println(xml6.getAttribute("yFin" ));
  72.                         }   
  73.                     }
  74.                 } 
  75.             }
  76.         }


 
Après remise en forme et commentaires, ça ira peut-être mieux... Je continue ;)
A+


Message édité par Profil supprimé le 08-02-2006 à 22:47:45
Reply

Marsh Posté le 14-02-2006 à 12:03:35    

Digester est la voie.

Reply

Marsh Posté le 14-02-2006 à 13:33:02    

xtsream


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 15-02-2006 à 08:11:50    

Je vote aussi Digester

Reply

Marsh Posté le 15-02-2006 à 09:14:58    

après un coup d'oeil au tuto de xstream... ben ça a l'air génial :-D
Si ça marche vraiment (pas le temps de tester là), c'est bien plus simple que digester...
à voir.

Reply

Marsh Posté le 15-02-2006 à 10:34:12    

brisssou a écrit :

après un coup d'oeil au tuto de xstream... ben ça a l'air génial :-D
Si ça marche vraiment (pas le temps de tester là), c'est bien plus simple que digester...
à voir.


nan ca marche pas du tout en fait, c'est un gros fake [:dawa]

Reply

Marsh Posté le 15-02-2006 à 11:00:55    

effectivement... j'ai peut-être, éventuellement, dit une connerie...

Reply

Marsh Posté le 15-02-2006 à 11:57:35    

souk connard [:rofl]
brisssou > ça marche très bien ;)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed