Bonjour tout le monde,
Un petit problème m’empêche de terminer mon projet.
Je dois parcourir un fichier XML, j’ai découvert JDOM (j’utilise la version 2.0.6) il y a quelques heures et j’aimerais savoir comment le faire fonctionner. J’ai vu l’existence d’un tutoriel. Utile ce tutoriel :) mais l’architecture de mon fichier XML, n’est pas la même, j’ai donc du mal à reproduire la méthode.
Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
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 <?xml version="1.0" encoding="UTF-8"?> <sites> <site id="bl" name="bl.com"> <countries> <country id="fr"> <servers> <server name="1.bl.p1.ci" /> <server name="2.bl.p1.ci" /> <server name="3.bl.p1.ci" /> </servers> </country> </countries> </site> <site id="ca" name="ca"> <countries> <country id="fr"> <servers> <server name="7.bl.p1.ci" /> <server name="8.bl.p1.ci" /> <server name="9.bl.p1.ci" /> </servers> </country> <country id="de"> <servers> <server name="4.bl.p1.ci" /> <server name="5.bl.p1.ci" /> <server name="6.bl.p1.ci" /> </servers> </country> </countries> </site> </sites>
et mon code JAVA
Code JAVA : Sélectionner tout - Visualiser dans une fenêtre à part
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 public void TestXmlReader(){ SAXBuilder builder = new SAXBuilder(); File xmlFile = new File("/home/user/workspace/search-lms/lms-superpom/lms-admin/src/main/resources/lms-admin.xml"); try { Document document = (Document) builder.build(xmlFile); Element rootNode = document.getRootElement(); List<Element> list = rootNode.getChildren("site"); Iterator<Element> i = list.iterator(); while(i.hasNext()){ Element current = (Element)i.next(); System.out.println(current.getAttributeValue("id")); System.out.println(current.getChild("countries").getAttributeValue("id")); System.out.println(current.getChild("countries").getChild("country").getAttributeValue("id")); System.out.println(current.getChild("countries").getChild("country").getChild("servers").getChild("server").getAttributeValue("name")); } } catch (IOException io) { System.out.println(io.getMessage()); } catch (JDOMException jdomex) { System.out.println(jdomex.getMessage()); }
J’ai plus ou moins réussi à afficher un résultat, en faisant ce truc archi-dégeu, mais j’obtiens : « bl null fr 1.bl.p1.ci ca null fr 7.bl.p1.ci ». Je ne vois pas le « de », ni les autres noms des serveurs :(
Dois-je déclarer un autre Iterator sur une liste qui prendrait comme racine « country » ?
Dans ce genre là (ne fonctionne pas):
Code JAVA : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 List<Element> list2 = rootNode.getChildren("country"); Iterator<Element> j = list2.iterator(); while(i.hasNext()){ while(j.hasNext()){ Element current2 = (Element)j.next(); System.out.println(current2.getAttributeValue("id")); System.out.println(current2.getChild("servers").getChild("server").getAttributeValue("name")); } }
Autrement, je suis en train de lire la documentation suivante (en anglais), on va voir si elle peut m’être utile.
Avez-vous une idée de comment faire ça mieux (et que ça fonctionne ^^') ?
Partager