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érer la liste des sous arbres d'une balise [DOM]


Sujet :

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

  1. #1
    Membre habitué Avatar de domiq44
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 301
    Points : 135
    Points
    135
    Par défaut Récupérer la liste des sous arbres d'une balise
    Bonjour,

    J'ai un XML sous forme d'une balise donnée d'un document W3C (org.w3c.dom.Document) de la forme suivante :

    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
     
    <?xml version="1.0"?>
    <routage>
      <feuille name="a11111">
        <Destinataire>AAAAA</Destinataire>
        <MessageIdentifier>BBBBBB</MessageIdentifier>
        <Receiver>CCCCCC</Receiver>
        <Priority>DDDDD</Priority>
        <IsNotificationRequested>EEEE</IsNotificationRequested>
        <Service>FFFFF</Service>
      </feuille>
      <feuille name="b22222">
        <Destinataire>HHHHH</Destinataire>
        <MessageIdentifier>IIIIIII</MessageIdentifier>
        <Receiver>JJJJJJ</Receiver>
        <Priority>KKKKKKK</Priority>
        <IsNotificationRequested>LLLLL</IsNotificationRequested>
        <Service>MMMMMM</Service>
      </feuille>
      <neRienFaire>PPPPP</neRienFaire>
      <erreur>QQQQQ</erreur>
    </routage>
    et je voudrais récupérer, dans une liste, tous les sous arbre de la balise <routage>.

    Voici la liste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    List<Document> listDoc = new ArrayList<Document>();
    Et voici comment j'aimerais récupérer les sous arbres XML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      <feuille name="a11111">
        <Destinataire>AAAAA</Destinataire>
        <MessageIdentifier>BBBBBB</MessageIdentifier>
        <Receiver>CCCCCC</Receiver>
        <Priority>DDDDD</Priority>
        <IsNotificationRequested>EEEE</IsNotificationRequested>
        <Service>FFFFF</Service>
      </feuille>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      <feuille name="b22222">
        <Destinataire>HHHHH</Destinataire>
        <MessageIdentifier>IIIIIII</MessageIdentifier>
        <Receiver>JJJJJJ</Receiver>
        <Priority>KKKKKKK</Priority>
        <IsNotificationRequested>LLLLL</IsNotificationRequested>
        <Service>MMMMMM</Service>
      </feuille>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      <neRienFaire>PPPPP</neRienFaire>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      <erreur>QQQQQ</erreur>
    Avec ou sans les infos XML (<?xml version="1.0"?>) et la balise principale (<routage>).

    Comment faire ?
    Merci.

  2. #2
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Points : 562
    Points
    562
    Par défaut
    Avec API Jdom
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Element root = document.getRootElement();
    List<Object> elements = root.getChildren();

  3. #3
    Membre habitué Avatar de domiq44
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 301
    Points : 135
    Points
    135
    Par défaut
    Merci « ttttnht » mais ces méthodes n'existent que pour les org.jdom.Document, pas pour les org.w3c.dom.Document

    J'ai trouvé une alternative qui me donne la liste des « Node »

    Je procède comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    private static List<Node> traiterRoutage(Document doc) {
    	ArrayList<Node> list = new ArrayList<Node>();
    	NodeList routages = doc.getElementsByTagName("routage");
    	Node routage = routages.item(0);
    	NodeList children = routage.getChildNodes();
    	for (int i = 0; (i < children.getLength()); i++) {
    		Node node = children.item(i);
    		if (org.w3c.dom.Node.ELEMENT_NODE == node.getNodeType()) {
    			list.add(node);
    		}
    	}
    	return list;
    }
    Mais il reste une étape vers le type « org.w3c.dom.Document ».

    Quelqu'un a-t-il une idée pour la dernière étape ?
    Merci.

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Points : 562
    Points
    562
    Par défaut
    J'ai mal lu ton message
    List<Document> listDoc = new ArrayList<Document>();
    Dans ce cas tu as tu peux leur transformer en une List<Document> en parcourant la list d'elements

  5. #5
    Membre habitué Avatar de domiq44
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 301
    Points : 135
    Points
    135
    Par défaut
    Citation Envoyé par ttttnht Voir le message
    J'ai mal lu ton message

    Dans ce cas tu as tu peux leur transformer en une List<Document> en parcourant la list d'elements
    Merci « ttttnht », mais comment fait on ?

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Points : 562
    Points
    562
    Par défaut
    Pour creer un document
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public static Document createDomDocument() { 
        try { 
            DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
            Document document = builder.newDocument(); 
            return doc; 
        } catch (ParserConfigurationException e) {
            // Never go there 
        } 
        return null; 
    }
    Ajouter un element dans un document
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    document.createElement("itemLabel");
    //
    Attention tu dois ajouter le contenu de chaque element de ta liste.

  7. #7
    Membre habitué Avatar de domiq44
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 301
    Points : 135
    Points
    135
    Par défaut
    Je viens de trouver la réponse

    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
     
    private static List<Document> traiterRoutage(Document doc) {
    	ArrayList<Document> list = new ArrayList<Document>();
    	DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    	DocumentBuilder builder = factory.newDocumentBuilder();
    	Node routage = doc.getDocumentElement();
    	NodeList children = routage.getChildNodes();
    	for (int i = 0; (i < children.getLength()); i++) {
    		Node node = children.item(i);
    		if (org.w3c.dom.Node.ELEMENT_NODE == node.getNodeType()) {
    			Document doc2 = builder.newDocument();
    			Node dup = doc2.importNode(node, true);
    			doc2.appendChild(dup);
    			list.add(doc2);
    		}
    	}
    	return list;
    }
    Merci pour tes indications précieuses « ttttnht ».

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 06/05/2010, 20h51
  2. récupérer la liste des sous dossiers
    Par Oh!Tofocus dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/09/2009, 23h38
  3. Réponses: 2
    Dernier message: 24/03/2006, 09h55
  4. Comment récupérer la liste des logiciels installés sur une machine ?
    Par david_chardonnet dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 19/09/2003, 17h41

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