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

Java Discussion :

Extraction de chaines avec StringTokenizer


Sujet :

Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 67
    Points : 46
    Points
    46
    Par défaut Extraction de chaines avec StringTokenizer
    Bonjour,

    Je cherche a extraire les données entre balises du fichier texte suivant :

    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
    POST /receiver HTTP/1.1\r\n
    User-Agent: PhoneTag\r\n
    Host: https://api.example.com/collect_transcriptions\r\n
    Accept: */*\r\n
    Content-Length: 1207\r\n number given here as example
    Content-Type: application/xml\r\n
    <?xml version = "1.0" encoding = "ISO-8859-1"?>
    <treatment_results>
    <sp_api_name>PhoneTag</sp_api_name>
    <account_did>9384602893</account_did>
    <service_type>s2t</service_type>
    <request_ref>
    <reference_id>4b1e6c33bb0022761c0a4af0</reference_id>
    <context_return_data>local context data;1243;e6c34bb0</context_return_data>
    </request_ref>b
    <receipt>
    <receipt_date_time>2011-04-15T13:12:51.23Z</receipt_date_time>
    </receipt>
    <result>
    <treatment_end_date_time>2011-04-15T13:13:06.12Z</treatment_end_date_time>
    <treatment_result>transcribed</treatment_result>
    <treatment_confidence_rate>0954</treatment_confidence_rate>
    </result>
    <treated_data>
    <media_content_type>text/plain</media_content_type>
    <media_content_parameters>charset=gsm-03.38-7</media_content_parameters>
    <media_file_data>Bonjour tout le monde mon nom est Jean et je suis né jour a midi.</media_file_data>
    </treated_data>
    <source_descriptors>
    <presumed_language>fr_FR</presumed_language>
    </source_descriptors>
    </treatment_results>
    Étant donné que l ' entête provient d ' un message soap , je ne peux pas utiliser jdom car le format xml du fichier est non reconnu...

    Je dois donc faire ceci a la main , et j ' ai pensé utiliser la classe StringTokenizer , mais j ' ai un peu de mal a l ' utiliser pour récupérer les chaines entre les balises xml.

    Mon code est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    StringTokenizer st = new StringTokenizer(chaine,"");// chaine contient mon fichier
     
    		System.out.println("tokens count: " + st.countTokens());
    		while (st.hasMoreElements()) {
    			String token = st.nextElement().toString();
    			//System.out.println("token = " + token);
    			String chaine=token.substring(token.indexOf("<sp_api_name>"),token.indexOf("</sp_api_name>"));
    			System.out.println(chaine);
    // ceci fonctionne partiellement car j 'ai toujours la balise ouvrante.
    		}
    Merci de votre aide

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Ne suffirait-il pas de nettoyer le début du fichier, puis d'utiliser JDom sur la partie XML ? La partie XML me semble correctement formée, non ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 67
    Points : 46
    Points
    46
    Par défaut
    Merci de ta réponse.

    J ' ai déja cherché dans cette direction , mais il ne me semble pas qu ' on puisse faire ignorer des lignes au parseur SAX( du moins je n ' ai rien trouvé a ce sujet.). Le fichier xml est bien formé sinon.

    Je reçois ce fichier d ' une requête post http donc je ne peux pas le modifier ...
    Merci de ton aide

  4. #4
    Membre habitué
    Avatar de Casp
    Homme Profil pro
    Reponsable Technique
    Inscrit en
    Avril 2003
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Reponsable Technique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2003
    Messages : 133
    Points : 132
    Points
    132
    Par défaut
    Bonjour,

    une petite question, pourquoi sur l'instanciation de ton stringtokenizer tu utilises "" comme séparateur ?? car là je ne sais pas ce qu'il va couper.

    après je pense que le mieux, c'est que dans un premier temps, tu effectues le ménage dans ton fichier xml, sans utiliser dom. c'est à dire, ouvrir ton fichier et supprimer tout ce qui se situe avec "<?xml".
    je n'ai pas le code en tête, mais je pense que cela doit se faire assez facilement en java (de base).

    une fois me nettoyage effectuer, tu pourras utiliser l'API Dom et extraire les données très facilement de ton fichier xml.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 342
    Points : 419
    Points
    419
    Par défaut
    +1

    en plus si je ne me trompe pas ta réponse est déjà dans une string
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	public static String cleanHttpHead(String src) {
    		if(src.indexOf("<?xml")>-1) {
    			return src.substring(src.indexOf("<?xml"), src.length());
    		}
    		else {
    			return null;
    		}
    	}
    et apres dom

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 67
    Points : 46
    Points
    46
    Par défaut
    Merci de votre aide , je n ' ai pas pensé à nettoyer le fichier avec String mais avec sax vu que c ' est du xml....(logique quant tu nous tient)
    Tout fonctionne bien maintenant , le nettoyage de l ' entête et le parsing dom.

    Merci encore

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/12/2012, 01h08
  2. Réponses: 8
    Dernier message: 27/04/2008, 15h27
  3. Extraction d'une chaine avec séparateurs
    Par kaceo dans le forum Requêtes
    Réponses: 1
    Dernier message: 05/05/2006, 10h36
  4. Requete avec extraction de chaine
    Par bestall666 dans le forum Access
    Réponses: 8
    Dernier message: 04/02/2006, 18h17
  5. Script test de deux chaine avec if
    Par kacedda dans le forum Linux
    Réponses: 6
    Dernier message: 02/05/2003, 15h38

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