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 :

Ne récupère pas les enfants [DOM]


Sujet :

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

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Ne récupère pas les enfants
    J'ai suivi ce tuto : http://cynober.developpez.com/tutoriel/java/xml/jdom/ pour parser un fichier XML.
    Mon problème, c'est que je n'arrive pas à le parcourir.
    Je récupère bien la racine, mais pas ses enfants.

    Mon code (je fais du J2EE) :

    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
     
    org.jdom.Document document = new org.jdom.Document();
     
            SAXBuilder sxb = new SAXBuilder();
            try
            {
               document = sxb.build(new File("getListing.xml"));
            }
            catch(Exception e){}
     
            org.jdom.Element racine = document.getRootElement();
            out.println(racine.getName());
     
            org.jdom.Element enfant = racine.getChild("diffgr:diffgram");
     
            if(enfant == null)
            {
              out.println("null");
            }
            else
            {
              out.println("ok");
            }

    Et voici mon code XML. Je ne peux pas le changer car je le récupère sur internet. Je dois le parser pour récupérer ce que j'ai besoin et le mettre dans un document csv.

    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
     
    <?xml version="1.0" encoding="utf-8"?>
    <DataSet xmlns="http://www.faire-savoir.com/webservices/">
      <xs:schema id="Listing" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
        <xs:element name="Listing" msdata:IsDataSet="true" msdata:Locale="fr-FR">
          <xs:complexType>
            <xs:choice maxOccurs="unbounded">
              <xs:element name="LISTING">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="ID" type="xs:string" minOccurs="0" />
                    <xs:element name="DATECREA" type="xs:dateTime" minOccurs="0" />
                    <xs:element name="DATEMAJ" type="xs:dateTime" minOccurs="0" />
                    ...
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:choice>
          </xs:complexType>
        </xs:element>
      </xs:schema>
      <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
        <Listing xmlns="">
          <LISTING diffgr:id="LISTING1" msdata:rowOrder="0">
            <ID>A6312AUV06300002</ID>
            <DATECREA>2007-09-25T14:38:28.0000000+02:00</DATECREA>
            <DATEMAJ>2010-10-13T11:42:11.0000000+02:00</DATEMAJ>
            ....
          </LISTING>
          <LISTING diffgr:id="LISTING2" msdata:rowOrder="0">
            ....
          </LISTING>
          <LISTING diffgr:id="LISTING3" msdata:rowOrder="0">
            ....
          </LISTING>
          ....
        </Listing>
      </diffgr:diffgram>
    </DataSet>
    Il y'a plusieurs LISTING.
    Ce qu'il y'a dans xs:schema ne m'intéresse pas. Ce que je veux, c'est récupérer les valeurs dans les champs contenus dans LISTING.

    Avec mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    out.println(racine.getName());
    me retourne bien DataSet.
    Par contre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    org.jdom.Element enfant = racine.getChild("diffgr:diffgram");
    me retourne null.
    Je n'arrive donc pas à descendre dans l'arborescence.

    Je pense que je fais une erreur stupide, mais je n'arrive pas à voir où et la documentation de jdom ne m'aide pas beaucoup

    Merci de votre aide.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 299
    Points : 422
    Points
    422
    Par défaut
    Salut, ce n'est pas une erreur stupide !
    Il faut juste utiliser les namespaces.

    diffgr:diffgram n'est pas le nom d'un des noeuds.
    Le nom est diffgram de l'espace de nom diffgr.

    Voilà un exemple :
    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
    package diadem.main;
     
    import java.io.File;
    import java.io.UnsupportedEncodingException;
    import java.net.URLDecoder;
    import java.util.ArrayList;
    import java.util.List;
     
    import org.jdom.Document;
    import org.jdom.Element;
    import org.jdom.Namespace;
    import org.jdom.input.SAXBuilder;
     
    public class Test {
    	public static final Namespace namespace_diffgr = Namespace.getNamespace("diffgr", "urn:schemas-microsoft-com:xml-diffgram-v1");
     
    	private File lefichierXML = null;
    	private Element racine;
    	private Document document;
     
     
    	public Test() {
    		parse();
     
    		Element diffgram = racine.getChild("diffgram", namespace_diffgr);
     
    		List<Element> list = diffgram.getChildren();
    		for(Element e : list){
    			System.out.println(e);
    		}
    	}
     
    	private void parse(){
    		SAXBuilder sxb = new SAXBuilder();
    		try{
    			lefichierXML = new File("test.xml");
    			document = sxb.build(lefichierXML);
    			racine = document.getRootElement();
    		}catch(Exception e){
    			e.printStackTrace();
    		}
    	}
     
    	public static void main(String[] args) {
    		new Test();
    	}
     
    }
    Courage

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup, ça marche !

  4. #4
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    salut,
    mon problème est le même que vous,j'ai essayé ta solution mais aucun résultat.
    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
    package jdom22;
     
     
    import java.io.*;
    import org.jdom.*;
    import org.jdom.input.*;
    import java.util.List;
    import java.util.Iterator;
    public class JDOM2
    {
    private File lefichierXML = null;
    static org.jdom.Document document;
    static Element racine;
    public JDOM2(){
        parse();
    //afficheALL();
     
    }
    public static void main(String[] args)
    {new JDOM2();
     
    }
    private void parse(){
    		SAXBuilder sxb = new SAXBuilder();
    		try{
     
    			lefichierXML = new File("REGIM.REGIM_videoFeatureExtractionResults.xml");
    			document = sxb.build(lefichierXML);
    			racine = document.getRootElement().getChild("videoFeatureExtractionRunResult ");
    		System.out.println("attribut width : " + racine.getAttributeValue("desc"));
            }catch(Exception e){
     
    			e.printStackTrace();
    		}
    	}
    }
    une exeption est declenché:
    java.lang.NullPointerException
    at jdom22.JDOM2.parse(JDOM2.java:29)
    at jdom22.JDOM2.<init>(JDOM2.java:15)
    at jdom22.JDOM2.main(JDOM2.java:20)
    mon fichier xml est comme suit:
    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
    34
    35
    <?xml version="1.0" encoding="UTF-8" ?> 
      <!DOCTYPE videoFeatureExtractionResults (View Source for full doctype...)> 
    - <videoFeatureExtractionResults>
    - <videoFeatureExtractionRunResult class="F" desc="This run uses the visual concept detection" priority="2" sysId="REGIM_4" trType="A">
    - <videoFeatureExtractionFeatureResult fNum="001">
      <item seqNum="1" shotId="shot11176_10" /> 
      <item seqNum="2" shotId="shot11176_11" /> 
      <item seqNum="3" shotId="shot11176_12" /> 
      <item seqNum="4" shotId="shot11176_3" /> 
      <item seqNum="5" shotId="shot11176_4" /> 
      <item seqNum="6" shotId="shot11176_5" /> 
      <item seqNum="7" shotId="shot11176_6" /> 
      <item seqNum="8" shotId="shot11176_7" /> 
      <item seqNum="9" shotId="shot11176_8" /> 
      <item seqNum="10" shotId="shot11176_9" /> 
      <item seqNum="11" shotId="shot11249_10" /> 
      <item seqNum="12" shotId="shot11249_11" /> 
      <item seqNum="13" shotId="shot11249_12" /> 
      <item seqNum="14" shotId="shot11249_13" /> 
      <item seqNum="15" shotId="shot11249_14" /> 
      <item seqNum="16" shotId="shot11249_15" /> 
      <item seqNum="17" shotId="shot11249_16" /> 
      <item seqNum="18" shotId="shot11249_17" /> 
      <item seqNum="19" shotId="shot11249_18" /> 
      <item seqNum="20" shotId="shot11249_19" /> 
      <item seqNum="21" shotId="shot11249_20" /> 
      <item seqNum="22" shotId="shot11249_21" /> 
      <item seqNum="23" shotId="shot11249_3" /> 
      <item seqNum="24" shotId="shot11249_4" /> 
      <item seqNum="25" shotId="shot11249_5" /> 
     <item seqNum="56" shotId="shot8827_1116" /> 
      <item seqNum="57" shotId="shot8827_1117" /> 
      </videoFeatureExtractionFeatureResult>
      </videoFeatureExtractionRunResult>
      </videoFeatureExtractionResults>
    j'aime parcourir les valeurs des attribut.
    SVP aidez-moi.

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Normalement tu aurais dû nous préciser quelle est la ligne 29, mais bon, l'erreur est évidente.

    dans la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    racine = document.getRootElement().getChild("videoFeatureExtractionRunResult ");
    Il y a un espace à la fin du nom d'élément. Un élément ne peut pas avoir d'espace dans son nom, donc un tel élément n'existe pas, et getChild() va forcément renvoyer null.

    Ce qui fait que racine est null, et à la ligne suivante, quand tu fais racine.getAttributeValue("desc"), cela appelle une méthode sur null, ce qui provoque un NullPointerException.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 20/07/2009, 13h29
  2. Réponses: 7
    Dernier message: 28/04/2009, 15h45
  3. Réponses: 6
    Dernier message: 22/05/2008, 11h59
  4. Réponses: 4
    Dernier message: 31/05/2007, 10h48

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