Bonjour,
Mon problème réside dans le fait que je veux parser un fichier xml et traiter les noeuds de profondeur 3 et 4 mais je n'ai pas pu le faire.
Pour le noeud de profondeur 2 ça marche sans probleme, mais je n'ai pas pu résoudre le probleme de profondeur 3!
Donc mon programme, lit un fichier sys.xml, et génère un deuxieme fichier cp.xml
voici mon code
le fichier sys.xml
Code : 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
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 package ProjectPackage; /** * * @author sousou */ import java.io.*; import org.jdom.*; import org.jdom.input.*; import org.jdom.filter.*; import java.util.List; import java.util.Iterator; import org.jdom.output.Format; import org.jdom.output.XMLOutputter; public class ParserSysEquation { static Element racine = new Element("work"); //On crée un nouveau Document JDOM basé sur la racine que l'on vient de créer static org.jdom.Document document = new Document(racine); public static void listChildren(Document d) { //On crée un nouvel Element cp et on l'ajoute //en temps qu'Element de racine Element cp = new Element("cp"); racine.addContent(cp); //On crée un nouvel Element page, //et on l'ajoute en temps qu'Element de cpnet Element page = new Element("page"); cp.addContent(page); //On crée un nouvel Attribut classe et on l'ajoute à page //grâce à la méthode setAttribute Attribute idpage = new Attribute("id","ID6"); page.setAttribute(idpage); Iterator i = d.getRootElement().getChildren().iterator(); while (i.hasNext()) { String url; org.jdom.Element e = (Element)i.next(); url = e.getAttributeValue("idvars"); String idvars = e.getChildText("idvars"); if (idvars==null) System.out.println("Pas de idvars"); else System.out.println(""+idvars); Element place = new Element("place"); page.addContent(place); Element idv= new Element("idv"); // idv.setText(url); place.addContent(url); //Les deux méthodes qui suivent seront définies plus loin dans l'article } } public static void main(String[] args) { SAXBuilder builder = new SAXBuilder(); try { Document doc = builder.build("sys.xml"); listChildren(doc); } catch (JDOMException e) { System.out.println("sys.xml is not well-formed."); System.out.println(e.getMessage()); } catch (IOException e) { System.out.println(e); } } }
Je veux traiter l"element cst, mais je n'arrive pas a le faire. Tout ce que je peux traiter c'est l'element eq. avec getRootElement().getChildren(), j'ai inséré getChildren("fct") mais ça marche pas!
Code : 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"?> <systeme> <eq idvars="v2 v3" idconsts="c1"> <fct nom="f1" ref="v1"> <cst nom="c1"> <c_value>438</c_value> <c_coef>1</c_coef> </cst> <var nom="v2"> <value>45</value> <coef>3</coef> </var> <var nom="v3"> <value>0</value> <coef>1</coef> </var> </fct> </eq> <eq idvars="v1" idconsts="c2"> <fct nom="f2" ref="v2"> <cst nom="c2"> <c_value>43</c_value> <c_coef>2</c_coef> </cst> <var nom="v1"> <value>45</value> <coef>3</coef> </var> </fct> </eq> </systeme>
Est ce que vous avez une solution svp?
MErci
Partager