IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

Récupération données dans noeud fils [DOM]


Sujet :

Format d'échange (XML, JSON...) Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 29
    Par défaut Récupération données dans noeud fils
    Voila, mon problème je dois récuperer des données dans un fichier 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
     
    <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>
    ...
    Ne vous inquiétez pas les balises se ferme après.
    Voici le code java que j'ai :
    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();
      }
     
    }
    Le code du tutoriel, je crois du site, dans lequel j'ai modifier.
    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.

  2. #2
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Le problème provient de la ligne #33. Il faut avoir une base de contexte relative eElement au lieu de doc qui est toujours la même et pourtant ça devrait dynamique.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     		      //NodeList nList2=doc.getElementsByTagName("position");
     		      NodeList nList2=eElement.getElementsByTagName("position");

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 29
    Par défaut
    Merci, beaucoup j'ai compris la structure, JDOM et cela m'a bien servi.
    Je mets mon code java final pour que cela puisse aider d'autres personnes :
    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
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    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[]) {
    		/*
    	// set up shared object values
        m_sGroupName = groupName;
        mSceneMgr = yourSceneMgr;
    	SceneNode *node;
    	Entity *ent;
    	Light *light;*/
    		try {
     
    			File fXmlFile = new File("tunnel.xml");
    			DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    			DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
    			Document doc = dBuilder.parse(fXmlFile);
    			doc.getDocumentElement().normalize();
     
    			NodeList nList = doc.getElementsByTagName("node");
     
    			for (int temp = 0; temp < 2/*nList.getLength()*/; temp++) 
    			{
     
    				Node nNode = nList.item(temp);
    				//if (nNode.getNodeType() == Node.ELEMENT_NODE) 
    				{
     
    					Element eElement = (Element) nNode;
    					//Create node with name
    					String name=eElement.getAttribute("name");
    					//node=pAttachNode->createChildSceneNode(name, Vector3::ZERO, Quaternion::IDENTITY);
    					System.out.println(name);
    					//Node Position
    					Element eElement1 = (Element)eElement.getElementsByTagName("position").item(0);
    					//node->setPosition((Real)atof(eElement.getAttribute("x")),(Real)atof(eElement.getAttribute("y")),(Real)atof(eElement.getAttribute("z")));
    					System.out.println(eElement1.getAttribute("x")+' '+eElement1.getAttribute("y")+' '+eElement1.getAttribute("z"));
     
    					//Node Rotation
    					eElement1 = (Element)eElement.getElementsByTagName("rotation").item(0); // aller à l'élément rotation
    					//node->setOrientation((Real)atof(eElement.getAttribute("qw")),(Real)atof(eElement.getAttribute("qx"))),(Real)atof(eElement.getAttribute("qy")),(Real)atof(eElement.getAttribute("qz")));
    					System.out.println(eElement1.getAttribute("qw")+' '+eElement1.getAttribute("qx")+' '+eElement1.getAttribute("qy")+' '+eElement1.getAttribute("qz"));
     
    					//Node Scale
    					eElement1 = (Element)eElement.getElementsByTagName("scale").item(0); // aller à l'élément scale
    					//node->setScale((Real)atof(element2->Attribute("x")),(Real)atof(element2->Attribute("y")),(Real)atof(element2->Attribute("z")));
    					System.out.println(eElement1.getAttribute("x")+' '+eElement1.getAttribute("y")+' '+eElement1.getAttribute("z"));
     
    					if (name.substring(0,4).equals("Lamp")||name.substring(0,5).equals("Point"))
    					{
    						eElement1 = (Element)eElement.getElementsByTagName("light").item(0);
    						//light = mSceneMgr->createLight(name);
    						if (eElement1.getAttribute("type").equals("point"))
    						{
    							//light->setType(Light::LT_POINT);
     
    						}
    						//Position Lamp
    						eElement = (Element)eElement1.getElementsByTagName("position").item(0);
    						//light->setPosition((Real)atof(element2->Attribute("x")),(Real)atof(element2->Attribute("y")),(Real)atof(element2->Attribute("z")));
    						System.out.println(eElement.getAttribute("x")+' '+eElement.getAttribute("y")+' '+eElement.getAttribute("z"));
     
    						//Attenuation Lamp
    						eElement = (Element)eElement1.getElementsByTagName("lightAttenuation").item(0); // aller à l'élément attenuation
    						//light->setAttenuation((Real)atof(element2->Attribute("range")),(Real)atof(element2->Attribute("constant")),(Real)atof(element2->Attribute("linear")),(Real)atof(element2->Attribute("quadratic")));
    						System.out.println(eElement.getAttribute("range")+' '+eElement.getAttribute("constant")+' '+eElement.getAttribute("linear")+' '+eElement.getAttribute("quadratic"));
     
    						//Diffuse Lamp
    						eElement = (Element)eElement1.getElementsByTagName("colourDiffuse").item(0); // aller à l'élément attenuation
    						//light->setDiffuseColour((Real)atof(element2->Attribute("r")),(Real)atof(element2->Attribute("g")),(Real)atof(element2->Attribute("b")));
    						System.out.println(eElement.getAttribute("r")+' '+eElement.getAttribute("g")+' '+eElement.getAttribute("b"));
     
    						if (name.substring(0,4).equals("Lamp"))
    						{
    							//Specular Lamp
    							eElement = (Element)eElement1.getElementsByTagName("colourSpecular").item(0); // aller à l'élément attenuation
    							//light->setSpecularColour((Real)atof(element2->Attribute("r")),(Real)atof(element2->Attribute("g")),(Real)atof(element2->Attribute("b")));
    							System.out.println(eElement.getAttribute("r")+' '+eElement.getAttribute("g")+' '+eElement.getAttribute("b"));
    						}		
    						//node->attachObject(light);
    					}
    					else
    					{
    						if (name.equals("Camera"))
    						{
    							//A coder
    						}
    						else
    						{
    							//Entity
    							eElement1 = (Element)eElement.getElementsByTagName("entity").item(0);
    							System.out.println(eElement1.getAttribute("meshFile"));
    							//ent= mSceneMgr->createEntity(name, element2->Attribute("meshFile"));
    							//node->attachObject(ent);
    						}
    					}
    				}
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    }
    Les lignes en commentaires sont du code C++ de ogre3D que je modifie par la suite pour ogre4j.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par djrital42 Voir le message
    Merci, beaucoup j'ai compris la structure, JDOM et cela m'a bien servi.
    Euh, ça ce n'est pas JDOM, c'est du DOM de base tel que fourni par Java.
    JDOM est une bibliothèque tierce, passablement plus facile à utiliser.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 29
    Par défaut
    Euh, Désolé, c'est bien du DOM, merci.
    Mais j'ai compris.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupération données dans ajax
    Par Poumchimie dans le forum jQuery
    Réponses: 0
    Dernier message: 09/07/2013, 15h54
  2. Récupération donnée dans une cellule
    Par macarons dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 26/08/2011, 14h26
  3. Récupération donnée dans le callback d'un bouton
    Par stick25 dans le forum Interfaces Graphiques
    Réponses: 4
    Dernier message: 15/03/2010, 10h55
  4. récupération données dans zone texte
    Par meldja dans le forum IHM
    Réponses: 5
    Dernier message: 15/03/2009, 14h37
  5. probleme récupération donnée dans script xsl
    Par jmacdev dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 12/05/2006, 17h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo