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 :

[java et xml] Récupérer une partie d'une sortie xml


Sujet :

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

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 6
    Points : 9
    Points
    9
    Par défaut [java et xml] Récupérer une partie d'une sortie xml
    Bonjour,

    voici mon problème:

    je cherche à récupérer à l'aide de méthodes java une partie seulement d'une réponse xml d'un webservice, à la fois les balises et les valeurs.

    exemple:

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <balise1>
    <balise2>
    <balise3>valeur1</balise3>
    </balise2>
    <balise4>
    <balise5>valeur2</balise5>
    </balise4>
    </balise1>

    => comment faire pour récupérer la partie de la sortie en gras ci-dessus (à la fois donc les balises et les valeurs), et mettre ça dans une variable de type string par exemple?

    je souhaite faire ça en java ou en groovy (travaille avec soapui).

    merci d'avance pour votre aide bienvenue.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Points : 574
    Points
    574
    Par défaut
    Bonjour,
    ceci n'est pas vraiment possible à partir de technologies XML.
    L'ordre des balises n'a que peu de sens, c'est leur arborescence qui compte.
    Pour récupérer ce "bout de balises et leur contenu", autant faire une opération sur une String. Donc conversion en amont du flux XML en String en espérant que l'ordre des balises envoyées soit toujours le même.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 6
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    L'ordre des balises est bien toujours le même. Je sais déjà récupérer l'ensemble (balises et contenu) de ma sortie, (il s'agit de la réponse d'un Web Service) dans une variable de type String.

    Mais à partir de là, comment coder "enlève tout ce qui est avant <balise2> dans ma variable String" et "enlève tout ce qui est après </balise2>", sachant que ces parties varient (au niveau du contenu)?

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Etudes et Développement
    Inscrit en
    Avril 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Etudes et Développement

    Informations forums :
    Inscription : Avril 2011
    Messages : 2
    Points : 5
    Points
    5
    Par défaut
    L'idée est la suivante, en appelant xmlData la String qui contient ton xml:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    final String startTag = "<balise2>";
    final String endTag = "</balise2>";
    int startIndex = xmlData.indexOf(startTag);
    int endIndex = xmlData.indexOf(endTag) + endTag.length();
    String content = xmlData.substring(startIndex, endIndex);
    Remarque 1: si le contenu de xmlData est mal formé alors les indexes retournés par indexOf seront incohérents et substring lancera une exception de type IndexOutOfBoundsException. A toi d'ajouter les vérifications nécessaires.

    Remarque2: une petite optimisation toute simple: ne commencer à chercher </balise2> qu'après <balise2>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int endIndex = xmlData.indexOf(endTag, startTag+startTag.length()) + endTag.length();

  5. #5
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 084
    Points
    7 084
    Par défaut
    Reprise du message de l'autre sujet
    Citation Envoyé par Nemek Voir le message
    Tu peux très bien le faire avec les APIs XML comme DOM ou une feuille XSL.
    Soit tu récupères le noeud DOM qui t'intéresse.

    Soit tu utilises une feuille XSL ... Difficile de faire plus explicite.

    Tu peux également faire avec SAX et Stax mais ça me paraît plus compliqué.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  6. #6
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 084
    Points
    7 084
    Par défaut
    Comme il faut tenir les gens par la main je vais être des plus explicites (mais j'irai pas jusqu'au code ...)

    Solution DOM
    Tu crées le DOM de ton XML, tu cherches l'élément qui t'intéresse, si tu veux le sortir sous forme de chaîne, utilise la transformation identité.

    Solution XSL
    Les XSL permettent de générer du contenu (généralement du XML) à partir d'une source XML. Tu as juste à créer un template qui "capture" ton élément et ensuite tu as une fonction qui permet d'avoir en sortie lenoeud matché et son contenu.


    PS : La solution "indexOf" c'est bien mais ça ne gère pas la présence multiple de la balise, le preprocessing, l'encodage, les namespaces déclarés sur un élément parent, etc.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

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

Discussions similaires

  1. [Débutant] Récupérer les coordonnées d'une partie d'une figure
    Par LeTube dans le forum MATLAB
    Réponses: 0
    Dernier message: 04/06/2014, 13h41
  2. Récupérer le nom d'une colonne d'une table dans une variable
    Par mimi51340 dans le forum Général Java
    Réponses: 4
    Dernier message: 13/03/2008, 14h23
  3. Sélectionner seulement une partie d'une valeur d'une cellule
    Par ArthurO0O dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/08/2007, 11h05
  4. masquer une partie d'une vidéo par une banniere
    Par lezabour dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 16/10/2006, 16h47
  5. copier une partie d'une image vers une autre
    Par gregcat dans le forum Langage
    Réponses: 1
    Dernier message: 14/04/2006, 13h39

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