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 certaines données avant un commentaire précis


Sujet :

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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 434
    Par défaut Récupérer certaines données avant un commentaire précis
    Bonjour à tous.

    J'arrive à récupérer des éléments de mon fichier xml. Mon problème est que je n'ai pas envie de les récupérer tous. Je veux m’arrêter à un commentaire précis.

    Par exemple voici une partie de mon xml :

    <Element ... />
    <Element ... />
    <Element .../>

    <!-- Autres éléments -->

    <Element .../>
    <Element .../>
    Est il possible de ne récupérer seulement ceux avant le commentaire ? Je rajoute d'ailleurs que le nombres d'éléments avant et après commentaire varie je ne peux donc pas "jouer avec les nombres".

    Merci de votre aide

  2. #2
    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
    C'est assez fragile comme idée, mais tu peux essayer de matcher :
    Les <Element> qui ont
    dans leurs following-sibling,
    un comment() qui a
    sa valeur égale à 'Autres éléments '
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    tu veux arrêter le parsing du fichier xml ou tout parser et extraire ensuite uniquement les éléments qui t'intéressent?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 434
    Par défaut
    Tout parser et ensuite extraire les données qui m'intéressent.

    Theviln t'entends quoi par following-sibling ?

    Merci à vous deux

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Si tu utilise jdom ou dom4j, tu prend l'élément racine, de type Element, et tu fais ce genre de chose


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Element rootElement = .....;
    // moche, mais bon, ca facilite la suite
    List<Element> childs = (List<Element>)rootElement.elements();
    List<Element> selectionnes = new ArrayList<Element>();
    for (Element e : childs){
       if (e.getNodeType()==Node.COMMENT_NODE)
         break; // commentaire trouvé
       // sinon on continue la récolte
       selectionnes.add(e);
    }
    Ca reste quand même vachement bancal dans le sens où les commentaires ne sont pas supposés avoir de valeur business en xml.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 434
    Par défaut
    Merci de ton aide je vais tester cela.

    Oui je sais bien que les commentaires ne doivent pas vraiment être traité mais je n'ai pas le choix

    Je n'arrive pas à utiliser la fonction pour les commentaires. Il ne la trouve pas.

    Voici mon code. Je veux seulement afficher les équipements avant un commentaire donné. Comment dois je m'y prendre ? Merci de ton aide

    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
     SAXBuilder sxb = new SAXBuilder();
    	      try
    	      {
    	         //On crée un nouveau document JDOM avec en argument le fichier XML
    	         //Le parsing est terminé ;)
    	         document = sxb.build(descSSI);
     
    	      }
    	      catch(Exception e){}
     
    	      //On initialise un nouvel élément racine avec l'élément racine du document.
    	      racine = document.getRootElement();
    	      //On initialise un nouvel élément equipements qui prend l'élément <Equipements> qui est le fils de racine
    	      Element equipements = racine.getChild("Equipements");
    	      //On initialise une liste qui prend pour valeurs tous les équipements du descripteur
    	      List listEquip = equipements.getChildren("Equipement");
    	      //Comment comment = new Comment("test");
     
    	      //*************************************************************
    	      // 	J'affiche ma liste d'équipements pour des tests			*
    	      //*************************************************************
    	      //On crée un Iterator sur notre liste
    	      Iterator i = listEquip.iterator();
    	      while(i.hasNext())
    	      {
    	         //On recrée l'Element courant à chaque tour de boucle afin de
    	         //pouvoir utiliser les méthodes propres aux Element comme :
    	         //selectionner un noeud fils, modifier du texte, etc...
    	         Element courant = (Element)i.next();
    	         //On affiche le nom de l'element courant
    	         System.out.println(courant.getAttributeValue("Nom"));
     
    	      }

  7. #7
    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 Leniouns Voir le message
    Theviln t'entends quoi par following-sibling ?
    C'est rien, je me croyais dans le forum XSLT/XPath, pas Java.

    Pour adapter l'algo en JDOM :
    - Il n'y a pas de notion de node type en JDOM. Au lieu d'appeler un getNodeType() il faut remplacer par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(content instanceof Comment)
    - Pour récupérer à la fois des éléments et des commentaires, il faut utiliser leur sur-type Content :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<Content> contents = (List<Content>)rootElement.getContent();
    getChildren() ne renvoie que des Elements, et un Comment n'est pas un Element.

    - Moi je dis, un bon vieil XPath et c'est réglé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    List<Element> elements = (List<Element>)
      XPath.selectNodes(doc, "/chemin/Element[following-sibling::comment()]");
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 434
    Par défaut
    Ok merci à vous deux, je vais m'aider de vos solutions

    Edit : Ok nikel, ça marche

    Merci à vous

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 18/05/2015, 10h57
  2. [WD18] Parser une page HTML pour récupérer certaines données.
    Par Khyinn dans le forum WinDev
    Réponses: 3
    Dernier message: 06/01/2015, 21h35
  3. [AC-2007] Récupérer certains chiffres avant et après le virgule dans un nombre
    Par gerarddurand dans le forum VBA Access
    Réponses: 4
    Dernier message: 06/12/2012, 15h26
  4. [AC-2003] récupérer une donnée à un endroit précis dans une table
    Par justine' dans le forum VBA Access
    Réponses: 3
    Dernier message: 12/04/2011, 17h39
  5. Réponses: 12
    Dernier message: 21/02/2007, 09h44

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