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 du texte d'un fichier xml entre deux balises


Sujet :

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

  1. #1
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 67
    Points : 42
    Points
    42
    Par défaut Récupérer du texte d'un fichier xml entre deux balises
    bonjour,
    j'ai besoin de récupérer du texte contenu entre deux balises xml.
    par exemple pour un fichier

    <balise 1>
    <balise 2> texte à récupérer avec ses balises </balises 2>
    </balise 1>
    je dois récupérer
    <balise 2> texte à récupérer avec ses balises </balises 2>

    est ce que cela est possible en utilisant des api de gestion de fichier xml ou alors vaut t'il mieux passer par des classes de manipulation de fichier texte?


    merci d'avance

    [ Modéré par Bulbo ]
    Ajout d'un tag dans le titre
    Les Règles du Forum

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 50
    Points : 59
    Points
    59
    Par défaut
    tu utilises SAX ou DOM, toutes les méthodes existent!
    le plus facile est d'utilisé le dom je pense mais SAX est bcp plus rapide
    Utilise JDOM plus particulièrement!

  3. #3
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 67
    Points : 42
    Points
    42
    Par défaut
    pour le moment j'en suis a me poser la question de comment faire simplement!
    donc j'ai pas de préférence! la premiere solution sera celle choisie

  4. #4
    NGY
    NGY est déconnecté
    Membre habitué
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Points : 164
    Points
    164
    Par défaut
    Ben sinon, tu peux te passer d'API :
    1. Tu ouvres ton .xml comme un fichier texte ;
    2. Tu le parcours jusqu'à trouver <balise1> ;
    3. Tu continues et copies dans une chaine tout ce que tu trouves jusqu'à tomber sur </balise1> ;
    4. Tu retires les texte </balise1> de ta chaine ;
    5. Tu sauves la chaine dans une Collection ;
    6. Tu recommence à l'étape 2 jusqu'à la fin du fichier ;
    7. Tu fermes le fichier ;
    8. Tu fais ce que tu veux du résultat stocké dans la Collection !

    Bon, attention quand même : c'est un truc simple, donc ça ne gère pas les spécificités du XML (encodage des caractères spéciaux par ex.), ça ne contrôle pas que le fichier est valide, ...
    Tout dépend de ce qu'il y aura dans ton fichier.

  5. #5
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 159
    Points : 139
    Points
    139
    Par défaut
    Je pense que tu peux tres rapidement et facilement répondre à tes besoins en utilisant XPath.

  6. #6
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 67
    Points : 42
    Points
    42
    Par défaut
    ca me semble pas mal du tout XPath pour ce que je veux faire.
    merci à vous! Je vais chercher un peu dans cette voie

  7. #7
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 67
    Points : 42
    Points
    42
    Par défaut
    j'ai regardé un peu mais je n'ai pas trouvé comment récupérer les balises, il me récupère seulement les valeurs comprises entre les balises.

    voici mon code
    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
    import java.io.*;
    import javax.xml.xpath.*;
    import org.w3c.dom.Document;
    import org.xml.sax.SAXException;
    import javax.xml.namespace.*; 
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
     
    public class OttCopy {
     
    	static File fichier;
     
    	// Constructeur 
    	public OttCopy (String url){
    		fichier = new File(url);
    	}
     
    	// Méthodes 
    	/**
             * créer une instance de XPath et lui faire évaluer une XPathExpression
             */
    	public String evaluerDOM(File file, String expression, QName retour){
    		String texteCopie=null;
    		try{
    			DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
    			DocumentBuilder constructeur = docBuilderFactory.newDocumentBuilder();
    			Document document = constructeur.parse(file);
     
    			//création du XPath 
    			XPathFactory fabrique = XPathFactory.newInstance();
    			XPath xpath = fabrique.newXPath();
     
    			//évaluation de l'expression XPath
    			XPathExpression exp = xpath.compile(expression);
    			Object resultat = exp.evaluate(document,retour);
    			System.out.println(resultat);
    			texteCopie=(String) resultat;
    		}catch(XPathExpressionException xpee){
    			xpee.printStackTrace();
    		} catch (ParserConfigurationException e) {
    			e.printStackTrace();
    		} catch (SAXException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		return texteCopie;
    	}
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		OttCopy test = new OttCopy("fichier.xml");
    		String resultat = test.evaluerDOM(fichier, "//groupes", XPathConstants.STRING);
    		System.out.println(resultat);
    	}
     
    }
    si qq peut m'aider

  8. #8
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Points : 445
    Points
    445
    Par défaut
    ha mais tu veux recuperer les balises aussi ?!
    Alors il vaut mieux considerer ton fichier comme un fichier texte.
    BufferReader et tout le tsointsoin...
    L'interêt du doute est que cela fait avancer.
    (parenthèses)Je suis à la recherche d'un emploi sur Valence(26) et ses environs.
    mon cv:
    http://charegis.netcv.org/

  9. #9
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 159
    Points : 139
    Points
    139
    Par défaut
    Montre ton fichier XML plus en détail ainsi que ta requete XPATH. Personnellement je resterais sur le choix de XPath qui est me semble t'il plus adapté.

  10. #10
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 67
    Points : 42
    Points
    42
    Par défaut
    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
      <?xml version="1.0" encoding="ISO-8859-1" ?> 
    - <groupes>
    - <groupe nom-groupe="Equipe Java">
    - <groupe nom-groupe="Résponsables">
    - <membre pseudo="cyberzoide">
      <nom>Etiévant</nom> 
      <prenom>Hugo</prenom> 
      <commentaire>Ingénieur systèmes et réseaux</commentaire> 
      </membre>
      </groupe>
    - <groupe nom-groupe="Modérateurs">
    - <membre pseudo="Greg01">
      <nom>DANELON</nom> 
      <prenom>Grégory</prenom> 
      <mail>email</mail> 
      <commentaire>Ingénieur Réseaux & Télécom</commentaire> 
      </membre>
      </groupe>
    - <groupe nom-groupe="Rédacteurs">
    - <membre pseudo="Ricky81">
      <nom>Siber</nom> 
      <prenom>Eric</prenom> 
      <commentaire>Ingénieur (Centrale Lille option Informatique)</commentaire> 
      </membre>
      </groupe>
      </groupe>
      </groupes>
    voici le fichier xml de l'exemple

    par exemple si je veux récupérer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <membre pseudo="cyberzoide">
      <nom>Etiévant</nom> 
      <prenom>Hugo</prenom> 
      <commentaire>Ingénieur systèmes et réseaux</commentaire> 
      </membre>
    si ma requete est /groupes/groupe[1]/groupe[1]/*

  11. #11
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 159
    Points : 139
    Points
    139
    Par défaut
    Je pense que tu voulais écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    //groupes/groupe[1]/membre[0]
    Et que t'affiches ton programme avec ce paramètre ?
    Je n'ai pas de processeur xslt sous la main .

  12. #12
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 67
    Points : 42
    Points
    42
    Par défaut
    avec //groupes/groupe[1]/membre[0]
    ca ne m'affiche absolument rien

    par contre avec ma requette cela m'affiche
    Etiévant
    Hugo
    Ingénieur systèmes et réseaux
    j'ai bien ce que je veux mais sans les balises

  13. #13
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 159
    Points : 139
    Points
    139
    Par défaut
    Essaie peut-être de changer ton appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     String resultat = test.evaluerDOM(fichier, "//groupes", XPathConstants.STRING);
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     String resultat = test.evaluerDOM(fichier, "//groupes", XPathConstants.NODE);
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     String resultat = test.evaluerDOM(fichier, "//groupes", XPathConstants.NODE_SET);
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     String resultat = test.evaluerDOM(fichier, "//groupes", XPathConstants.DOM_OBJECT_MODEL);

  14. #14
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 159
    Points : 139
    Points
    139
    Par défaut
    Je pencherais plutot pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     String resultat = test.evaluerDOM(fichier, "//groupes", XPathConstants.NODE);
    Tiens nous au courant.

  15. #15
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 159
    Points : 139
    Points
    139
    Par défaut
    Je pencherais plutot pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     String resultat = test.evaluerDOM(fichier, "//groupes", XPathConstants.NODE);
    Tiens nous au courant.

  16. #16
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 67
    Points : 42
    Points
    42
    Par défaut
    voila ce que me retourne le NODE
    [groupes: null]

    et les autres ne sont pas mieux!

  17. #17
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Points : 445
    Points
    445
    Par défaut
    Citation Envoyé par Regis.C
    ha mais tu veux recuperer les balises aussi ?!
    Alors il vaut mieux considerer ton fichier comme un fichier texte.
    BufferReader et tout le tsointsoin...
    Je reste sur mon idée...mais je ne comprend pas pourquoi tu souhaites recuperer les balises...
    A partir du moment où tu connais la structure de ton fichier XML, un parser SAX te permet de récuperer les données que tu veux entre les balises que tu souhaites...
    L'interêt du doute est que cela fait avancer.
    (parenthèses)Je suis à la recherche d'un emploi sur Valence(26) et ses environs.
    mon cv:
    http://charegis.netcv.org/

  18. #18
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 159
    Points : 139
    Points
    139
    Par défaut
    C'est sur que tu peux le faire avec SAX, mais se taper tout un parsing pour recuperer un morceau bien définit c un peu lourd. Mieux vaut s'appuyer sur XPath qui permet de faire des requêtes sur ton XML.
    Du moins c'est mon avis.

  19. #19
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 67
    Points : 42
    Points
    42
    Par défaut
    oui mais avec Xpath j'ai pas trouvé comment faire!

    et j'ai besoin de récupérer les parties avec les balises d'un fichier xml pour le séparer en plusieurs fichiers xml.

  20. #20
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Points : 445
    Points
    445
    Par défaut
    Citation Envoyé par manutudescends
    oui mais avec Xpath j'ai pas trouvé comment faire!

    et j'ai besoin de récupérer les parties avec les balises d'un fichier xml pour le séparer en plusieurs fichiers xml.
    Rien de t'empèche d'instancier des objets grâce à un parser SAX, et d'ensuite créer un nouveau fichier XML en creant toi-même tes nom de balises...
    J'avoue ne pas bien comprendre ta façon de faire en rapport à ce que tu souhaites comme résultat...
    L'interêt du doute est que cela fait avancer.
    (parenthèses)Je suis à la recherche d'un emploi sur Valence(26) et ses environs.
    mon cv:
    http://charegis.netcv.org/

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [TortoiseCVS] Listing des fichiers modifiés entre deux balises
    Par lead8209 dans le forum CVS
    Réponses: 0
    Dernier message: 01/06/2011, 14h51
  2. [AJAX] Transmettre un fichier XML entre deux serveurs via un client
    Par quentin_ler dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 21/08/2007, 10h03
  3. Réponses: 5
    Dernier message: 10/04/2006, 12h07
  4. [XSL]récupérer une valeur de plusieurs fichiers XML
    Par snoop dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 05/02/2006, 00h32
  5. [](VB) Récupérer les données dans un fichier .xml
    Par Furius dans le forum VBScript
    Réponses: 4
    Dernier message: 02/10/2005, 20h39

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