Java et XML...Exporter un Xml avec DOM

Java et XML...Exporter un Xml avec DOM - XML/XSL - Programmation

Marsh Posté le 20-02-2006 à 12:25:33    

Bonjour à tous.
J'aimerais savoir comment exporter un fichier XML avec API dom.
Voila mon probleme :
Je suis en train de créer une simulation d'un reseau peer to peer. J'aimerai qu'à la lecture de ce XML :
 
<?xml version="1.0" encoding='ISO-8859-1' standalone ='yes'?>
<Rezeau xml;lang='fr'>
 
 <SuperPair>
  <nomSP >SP1</nomSP>
<voisin>SP2</voisin>
<voisin>SP4</voisin>
<voisin>SP5</voisin>
 
 </SuperPair>
 <SuperPair>
  <nomSP >SP2</nomSP>
<voisin>SP1</voisin>
<voisin>SP3</voisin>
<voisin>SP6</voisin>
 
 </SuperPair>
 <SuperPair>
  <nomSP>SP3</nomSP>
<voisin>SP2</voisin>
<voisin>SP7</voisin>
<voisin>SP4</voisin>
 
 </SuperPair>
 <SuperPair>
  <nomSP>SP4</nomSP>
<voisin>SP1</voisin>
<voisin>SP8</voisin>
<voisin>SP3</voisin>
 
 </SuperPair>
 <SuperPair>
  <nomSP>SP5</nomSP>
<voisin>SP8</voisin>
<voisin>SP1</voisin>
<voisin>SP6</voisin>
 </SuperPair>
 <SuperPair>
  <nomSP>SP6</nomSP>
<voisin>SP7</voisin>
<voisin>SP2</voisin>
<voisin>SP5</voisin>
 </SuperPair>
 <SuperPair>
  <nomSP>SP7</nomSP>
<voisin>SP6</voisin>
<voisin>SP8</voisin>
<voisin>SP3</voisin>
 </SuperPair>
 <SuperPair>
  <nomSP>SP8</nomSP>
<voisin>SP5</voisin>
<voisin>SP7</voisin>
<voisin>SP4</voisin>
 </SuperPair>
 <Pair>
  <nomP>P1.1</nomP>
<seraAttache>SP1</seraAttache>
  <keyword>a</keyword>
  <keyword>b</keyword>
  <keyword>c</keyword>
 </Pair>
 <Pair>
  <nomP>P2.1</nomP>
<seraAttache>SP1</seraAttache>
  <keyword>d</keyword>
 </Pair>
 <Pair>
  <nomP>P3.1</nomP>
<seraAttache>SP1</seraAttache>
  <keyword>a</keyword>
  <keyword>d</keyword>
 </Pair
 <Pair>
  <nomP>P1.2</nomP>
<seraAttache>SP2</seraAttache>
  <keyword>d</keyword>
  <keyword>e</keyword>
  <keyword>c</keyword>
 </Pair>
 <Pair>
  <nomP>P2.2</nomP>
<seraAttache>SP2</seraAttache>
<keyword>d</keyword>
  <keyword>a</keyword>
 </Pair>
 <Pair>
  <nomP>P1.3</nomP>
<seraAttache>SP3</seraAttache>
  <keyword>e</keyword>
  <keyword>f</keyword>
 </Pair>
 <Pair>
  <nomP>P2.3</nomP>
<seraAttache>SP3</seraAttache>
  <keyword>e</keyword>
  <keyword>b</keyword>
  <keyword>c</keyword>
 </Pair>
 <Pair>
  <nomP>P3.3</nomP>
<seraAttache>SP3</seraAttache>
  <keyword>e</keyword>
 </Pair>
 <Pair>
  <nomP>P1.4</nomP>
<seraAttache>SP4</seraAttache>
  <keyword>a</keyword>
  <keyword>b</keyword>
  <keyword>d</keyword>
 </Pair>
 <Pair>
  <nomP>P2.4</nomP>
<seraAttache>SP4</seraAttache>
  <keyword>f</keyword>
 </Pair>
 <Pair>
  <nomP>P1.5</nomP>
<seraAttache>SP5</seraAttache>
  <keyword>f</keyword>
  <keyword>b</keyword>
  <keyword>c</keyword>
 </Pair>
 <Pair>
  <nomP>P2.5</nomP>
<seraAttache>SP5</seraAttache>
  <keyword>a</keyword>
 </Pair>
 <Pair>
  <nomP>P1.6</nomP>
<seraAttache>SP6</seraAttache>
  <keyword>e</keyword>
 </Pair>
 <Pair>
  <nomP>P1.7</nomP>
<seraAttache>SP7</seraAttache>
  <keyword>f</keyword>
 </Pair>
 <Pair>
  <nomP>P1.8</nomP>
<seraAttache>SP8</seraAttache>
  <keyword>f</keyword>
  <keyword>b</keyword>
 </Pair>
 <Pair>
  <nomP>P2.8</nomP>
<seraAttache>SP8</seraAttache>
  <keyword>c</keyword>
 </Pair>
</Rezeau>

 
l'api DOM me créé les classes SUPER PAIR, et PAIR... bref, voici ce que j'ai commencé a faire :
 
try{
          // création d'une fabrique de documents
          DocumentBuilderFactory fabrique = DocumentBuilderFactory.newInstance();
          // création d'un constructeur de documents
          DocumentBuilder constructeur = fabrique.newDocumentBuilder();
          // lecture du contenu d'un fichier XML avec DOM
          File xml = new File("U:\JAVA\My Workspace\Projet\Essai XML\Essai XML\XML.xml" );
          Document document = constructeur.parse(xml);
          //traitement du document
       }catch(ParserConfigurationException pce){
          System.out.println("Erreur de configuration du parseur DOM" );
          System.out.println("lors de l'appel à fabrique.newDocumentBuilder();" );
       }catch(SAXException se){
          System.out.println("Erreur lors du parsing du document" );
          System.out.println("lors de l'appel à construteur.parse(xml)" );
       }catch(IOException ioe){
          System.out.println("Erreur d'entrée/sortie" );
          System.out.println("lors de l'appel à construteur.parse(xml)" );
       }
 
En bleu, un autre probleme qui survient : le ien vers mon fichier XML est faux, car l'erreur du "ATTENTION , pas le droit d'utiliser les \" s'affiche. Comment faire le lien...le mettre dans le meme dossier? Par getDocumentURI();?
 
Merci à tous pour votre aide.

Reply

Marsh Posté le 20-02-2006 à 12:25:33   

Reply

Marsh Posté le 20-02-2006 à 14:56:07    

je me suis arrangé pour ke l'adresse du XML soit trouvé!!!
Je suis passé par un URL... du coup plus de probleme
http://www.laltruiste.com/document [...] ement.html
MERCI LALTRUISTE!!
Mais maintenant, je tombe à coup sur dans l'exception!!! :
 
Erreur d'entrée/sortie
lors de l'appel à construteur.parse(xml)
 
ARF!!
Quelqu'un peut-il m'aider?


Message édité par flavio_dev le 20-02-2006 à 15:03:52
Reply

Marsh Posté le 20-02-2006 à 15:01:27    

remplace tes \ par des \\
le \ est un caractere d'echappement, il faut donc le doubler dans les chaines de caracteres ...

Reply

Marsh Posté le 20-02-2006 à 15:09:22    

Merci SOUK, ca a l'air de marcher. je ne tombe plus dans mon exception... ca à l'air bon... si j'ai d'autres problemes, je compte sur toi? ;)
A tout à l'heure, parce que je pense que ca va pas tarder :)
Merci


Message édité par flavio_dev le 20-02-2006 à 15:09:47
Reply

Marsh Posté le 20-02-2006 à 17:16:57    

Re coucou!!! J'ai encore un probleme!!! ;)
Voila, cette fois ci, j'ai testé la lecture de mon XML :
 
    File xml = new File("U:\\Project\\XML.xml" );
           Document document = constructeur.parse(xml);  
          System.out.println("lecture du contenu d'un fichier XML avec DOM" );

         //traitement du document
           
          Element racine = document.getDocumentElement();
          //recuperation de la racine
          System.out.println("Recupération de la racine de l'arborescence" );
           
          System.out.println("Voici le nom de la racine : "+racine.getNodeName());
           
           
        /* NamedNodeMap atribRacine = racine.getAttributes();
          System.out.println("L'attibut de la racine : "+atribRacine.getNamedItem(racine.getNodeName()));
          */

           
          Node premierEnfant = racine.getFirstChild();
         System.out.println("Voici le nom du premier enfant avec nodename: "+premierEnfant.getNodeName());
         System.out.println("Voici le nom du premier enfant avec localname: "+premierEnfant.getLocalName());
         
          NodeList liste = racine.getChildNodes();
         // getChildNodes : retourne une NodeList contenant l'ensemble des nodes enfants.
          System.out.println("Recupération des nodes enfants" );
           
          for(int i=0; i<liste.getLength(); i++){
           Node elm = liste.item(i);
           //Node elm = liste.item(i);
           String name = elm.getNodeName();
           //NamedNodeMap attribute = elm.getAttributes();
           
           System.out.println("Le nom : "+name);
          //System.out.println("L'attibut : "+attribute.getNamedItem(name));
          }
 
Voici les resultats qui s'affichent à l'ecran de console :

création d'une fabrique de documents
création d'un constructeur de documents
lecture du contenu d'un fichier XML avec DOM
Recupération de la racine de l'arborescence
Voici le nom de la racine : Rezeau
Voici le nom du premier enfant avec nodename: #text
Voici le nom du premier enfant avec localname: null
Recupération des nodes enfants
Le nom : #text
Le nom : SuperPair
Le nom : #text
Le nom : SuperPair
Le nom : #text
Le nom : SuperPair
....... ... ..

etc..
 
Que veux dire le #text?
Pourquoi la racine est un element, alors que les enfants sont des Nodes?
Comment avoir que des "SuperPair", et pas les "#text"!!?
Quel est la difference entre NodeName et LocalName?
(Voici le nom du premier enfant avec nodename: #text
Voici le nom du premier enfant avec localname: null)
Et le sumum, c'est si quelqu'un arrive a trouver comment acceder à mes balises <nomSP >SP1</nomSP> et <voisin>SP2</voisin> ?
Merci d'avance les pros de XML!!


Message édité par flavio_dev le 20-02-2006 à 17:30:02
Reply

Marsh Posté le 21-02-2006 à 17:55:04    

Re coucou. Je remarque que personne n'a pu m'aider. mais j'ai quand meme pu m'en sortir. En revanche, je voulais savoir s'il était possible de faire une distinction entre  <nomSP >SP1</nomSP> et <voisin>SP2</voisin> . en effet, le premier est est un string, et le deuxieme, j'aimeraisque ce soit un objet de type Superpair....et non une string, car à la création de mes objet, tous mes attributs sont donc d etype String... Bref, si les pros de l'info XML sont dans le coin...

Reply

Marsh Posté le 05-10-2007 à 20:43:13    

salut j'ai quelques problèmes aussi pour faire une ptite api pour parser facilement des document xml en javascript
 
Pour ta question sur l'affichage de #text une fois sur deux je viens de voir quen fait childNodes contient:
à lindice 0 le contenu du noeud parent  
puis à lindice 1 le noeud fils en question,
indice 2 le contenu du fils en question,
indice 3 le noeud fils suivant,
etc...
 
Cest bizarre je sais...


Message édité par soul8 le 05-10-2007 à 20:45:51
Reply

Marsh Posté le 08-10-2007 à 15:43:15    

lol Soul8, entendu parler de la différence entre Java et javascript qui vient d'un petit détail entre les 2 qui a son importance : ça n'a RIEN à voir ;) (ouf, sans insultes, c't'un exploit)
 
Sinon,
 
Que veux dire le #text?
les #text, ça correspond à des Nodes de type Text (l'interface org.w3c.dom.Text) que sont tes espaces et autres retours à la ligne entre tes éléments SuperPair
 
Pourquoi la racine est un element, alors que les enfants sont des Nodes?
un Element est aussi un Node
 
Comment avoir que des "SuperPair", et pas les "#text"!!?
Vire tes espaces
 
Quel est la difference entre NodeName et LocalName?
pas sûr mais je crois que localName ne contient pas le namespace

Et le sumum, c'est si quelqu'un arrive a trouver comment acceder à mes balises <nomSP >SP1</nomSP> et <voisin>SP2</voisin> ?

ben tu prends déjà ton élément racine <Rezeau> et pour celui-ci tu obtiens les <SuperPair> et les <Pair> grâce à getChildNodes et en faisant une boucle dessus, vu que je t'ai dit que Element était aussi un Node, c'est que tu peux utiliser getChildNodes sur ceux obtenus la première fois, donc dans ta boucle, tu refais la même chose avec les sous-éléments. Sinon, pour virer tes espaces, t'a qu'à gérer de filtrer les Nodes de type Text ... (comme ça tu peux éviter de les enlever à la main et avoir un truc illisible à la fin)


Message édité par TheRom_S le 08-10-2007 à 15:44:02

---------------
The Rom's, à votre service
Reply

Sujets relatifs:

Leave a Replay

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