Voila, mon problème je dois récuperer des données dans un fichier xml :
Ne vous inquiétez pas les balises se ferme après.
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 <scene exported_by="Christophe" formatVersion="1.0.1" previous_export_time="0" export_time="1335986756.02" > <nodes > <node name="Plane.005" > <position y="0.512080" x="-0.998885" z="0.960184" /> <rotation qy="0.000000" qx="0.000000" qz="-0.707107" qw="0.707107" /> <scale y="0.018538" x="0.018538" z="0.018538" /> <game > <sensors /> <actuators /> </game> <entity anisotropic_friction="False" lock_trans_y="False" damping_trans="0.03999999910593033" damping_rot="0.10000000149011612" inertia_tensor="0.4000000059604645" actor="False" velocity_min="0.0" lock_trans_z="False" physics_type="STATIC" lock_trans_x="False" meshFile="Plane.008.mesh" friction_y="1.0" friction_x="1.0" friction_z="1.0" velocity_max="0.0" ghost="False" name="Plane.008" mass_radius="1.0" mass="1.0" lock_rot_x="False" lock_rot_y="False" lock_rot_z="False" /> </node> <node name="Lamp3" > <position y="0.000002" x="0.000002" z="-0.000000" /> <rotation qy="0.000000" qx="0.000000" qz="-0.000000" qw="1.000000" /> <scale y="1.000000" x="1.000000" z="1.000000" /> <game > <sensors /> <actuators /> </game> <light type="point" name="Point.001" powerScale="0.009999999776482582" > <position y="0.512080" x="-0.998885" z="0.960184" /> <lightAttenuation range="5000" quadratic="0.0" constant="1.0" linear="0.04" /> <colourDiffuse r="1.0" b="1.0" g="1.0" /> </light> </node> ...
Voici le code java que j'ai :
Le code du tutoriel, je crois du site, dans lequel j'ai modifier.
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 import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.w3c.dom.Node; import org.w3c.dom.Element; import java.io.File; public class DotSceneLoader { public static void main(String argv[]) { try { File fXmlFile = new File("tunnel.xml"); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(fXmlFile); doc.getDocumentElement().normalize(); System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); NodeList nList = doc.getElementsByTagName("node"); System.out.println("-----------------------"); for (int temp = 0; temp < 2/*nList.getLength()*/; temp++) { Node nNode = nList.item(temp); if (nNode.getNodeType() == Node.ELEMENT_NODE) { Element eElement = (Element) nNode; System.out.println(eElement.getAttribute("name")); NodeList nList2=doc.getElementsByTagName("position"); eElement=(Element) nList2.item(0); System.out.println("Position : "+ eElement.getAttribute("x")); } } } catch (Exception e) { e.printStackTrace(); } } private static String getTagValue(String sTag, Element eElement) { NodeList nlList = eElement.getElementsByTagName(sTag).item(0).getChildNodes(); Node nValue = (Node) nlList.item(0); return nValue.getNodeValue(); } }
Mon problème est que je ne récupère pas bien les données du x dans la balise position dans le noeud nommé Lamp3. Je sais que sa vient de ma ligne de code avec le doc.
Mais je ne vois pas comment accéder à ces informations (position, rotation,scale,... de chaque "node"). La boucle for me sert à parcourir mes noeuds "node". J'ai réussi à le faire en C++ avec TinyXML mais ce n'est pas la même logique sous java.
Merci d'avance pour vos réponses et pour le temps que vous y consacrerez. Je viens vers vous en ultime recours, c'est pour un projet et ça fait deux semaine que je suis au même point.
Christophe.
Partager