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

MATLAB Discussion :

Récupérer plusieurs tokens dans une expression régulière


Sujet :

MATLAB

  1. #1
    Membre averti
    Femme Profil pro
    Ingénieur informatique scientifique
    Inscrit en
    Mai 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique scientifique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 313
    Points : 301
    Points
    301
    Par défaut Récupérer plusieurs tokens dans une expression régulière
    Bonjour,

    je travaille actuellement sur un programme où je récupère le contenu d'un fichier xml grâce à la toolbox xml, et je dois ensuite récupérer uniquement la valeur de certains mots clés.
    J'ai notamment quelque chose du genre:

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <balise1>
        <item label="MOT-CLE" />
        <item label="MOT-CLE" />
        <item label="MOT-CLE" />
    </balise1>

    je dois alors récupérer tous les "MOT-CLE". Pour cela j'utilise les expressions régulières:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste = regexp(contenu_fichier_XML,'<balise1>.*?<item.*?label="(\w+)".*?/></balise1>','tokens');
    Or en faisant cela je ne récupère que le premier mot-clé, comment faire pour tous les récupérer?

    Merci d'avance pour votre aide.

  2. #2
    FLB
    FLB est déconnecté
    Modérateur
    Avatar de FLB
    Homme Profil pro
    Ing. Aérospatiale
    Inscrit en
    Juin 2003
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ing. Aérospatiale
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Points : 1 185
    Points
    1 185
    Par défaut
    Bonjour,
    pourquoi ne pas utiliser xmlread, plutôt que les regexp?
    Tu trouveras plus d'information ici :
    http://www.developpez.net/forums/d63...l-xml-toolbox/

  3. #3
    Membre averti
    Femme Profil pro
    Ingénieur informatique scientifique
    Inscrit en
    Mai 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique scientifique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 313
    Points : 301
    Points
    301
    Par défaut
    tout simplement parce que j'ai l'habitude d'utiliser les expressions régulières (que ce soit sous matlab ou autre), ce qui fait que je n'avais même pas pensé à ta solution!
    Par contre je n'arrive pas à utiliser xmlread... Voilà ce que j'ai essayé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    structXML = xmlread(monFicXML);
    balise1 = structXML.getDocumentElement;
    items = balise1.getChildNodes;
    label = items.getElementsByTagName('label').items(0).getTextContent;
    Cependant cela ne fonctionne pas (je sais que dans l'idée il faudra une boucle pour récupérer tous les éléments).
    J'ai du mal à comprendre comment la méthode "getDocumentElement" va trouver la balise 'balise1' et non une autre dans structXML.
    De plus ici je ne dois pas récupérer une valeur d'un tag mais la valeur d'une des options du tag (ici "label")... J'imagine donc qu'il faut utiliser une autre fonction que getElementsByTagName mais je ne trouve pas laquelle.

    Tout ça me semble bien compliqué par rapport à une solution uniligne avec une expression régulière...

  4. #4
    FLB
    FLB est déconnecté
    Modérateur
    Avatar de FLB
    Homme Profil pro
    Ing. Aérospatiale
    Inscrit en
    Juin 2003
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ing. Aérospatiale
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Points : 1 185
    Points
    1 185
    Par défaut
    Salut,
    il est vrai que xmlread est un peu lourd d'utilisation. C'est pourquoi la toolbox xml est plébiscité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    xmlstr = fileread('ton_fichier.xml'); V = xml_parseany(xmlstr);
    V.item{1}.ATTRIBUTE.label
    V.item{2}.ATTRIBUTE.label
    V.item{3}.ATTRIBUTE.label
    Si tu as plusieurs <balise1>, englobe les dans une seule <main>, afin d'avoir "balise1" dans ta structure (toutes les balises de niveau 1 sont concaténées).

  5. #5
    Membre averti
    Femme Profil pro
    Ingénieur informatique scientifique
    Inscrit en
    Mai 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique scientifique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 313
    Points : 301
    Points
    301
    Par défaut
    Super ça marche très bien et c'est une solution lisible et claire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    liste = {};
    for i=1:length(V.balise1{1}.item)
        liste = [liste V.balise1{1}.item{i}.ATTRIBUTE.label];
    end
    me renvoie bien la liste des "MOT-CLE".

    Merci beaucoup!

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

Discussions similaires

  1. [DEBUTANT]Récupérer plusieurs champs dans une procédure stockée
    Par tripper.dim dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 20/06/2007, 17h58
  2. Réponses: 5
    Dernier message: 31/08/2006, 13h34
  3. Parenthèses dans une expression régulière
    Par papyreno dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 10/05/2006, 16h28
  4. [EXP] Evaluation dans une expression régulière
    Par SergentHeinz dans le forum Langage
    Réponses: 7
    Dernier message: 10/11/2005, 18h17
  5. Réponses: 6
    Dernier message: 17/08/2005, 12h38

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