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

C++/CLI Discussion :

Extraire le contenu brut dans une balise xml


Sujet :

C++/CLI

  1. #1
    Débutant
    Extraire le contenu brut dans une balise xml
    Bonjour à tous,

    J'ai un string contenant une balise de la forme suivante:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    <y:txt xxxxx> contenu_txt </y:txt>


    Sans utiliser les méthodes qui parsent les fichiers xml, pourriez-vous me recommandez une méthode facile et efficace pour extraire le text: contenu_txt.

    Merci beaucoup d'avance pour vos retours !

  2. #2
    Membre expert
    Salut,

    Si tu es sûr du format :
    * sans C++ (en C) ni CLI (std::string.c_str ou char*) : deux strchr ?
    * en C++ et toujours pas CLI (std::string) : deux find_first_of ?
    * en C++/CLI (System::String) : deux IndexOf ?

    La version C sera la plus simple (mais non c'est pas du prosélytisme :p).
    Plus je connais de langages, plus j'aime le C.

  3. #3
    Expert éminent sénior
    La version C sera la plus simple (mais non c'est pas du prosélytisme :p).
    C'est aussi la largement plus limité, quid de la gestion des CDATA, de l'encodage xml des caractères réservés, etc...

    Sans utiliser les méthodes qui parsent les fichiers xml,
    C'est vraiment chercher à s'emmerder pour rien.

    une méthode facile et efficace
    Bin, comme tu l'as dit implicitement, en utilisant les bibliothèques et classe de framework qui le feront toujours largement mieux qu'un pauvre code tout moisi fait sans même lire les spécification (imbuvables) de ce qu'est XML.

    Et quite à faire dans le cracra, les expressions régulières sont nos amis (et elles sont dans le C++ standard depuis C++11).

  4. #4
    Membre expert
    Citation Envoyé par bacelar Voir le message
    C'est aussi la largement plus limité, quid de la gestion des CDATA, de l'encodage xml des caractères réservés, etc...
    Le CDATA n'a aucune incidence avec un strchr(GT) et un strrchr(LT). Pareil pour les caractères réservés échappés (l'OP veut une méthode simple, m'est avis qu'il veut justement éviter une usine à gaz qui fait l'interprétation car il n'en a pas le besoin). Reste le cas du strchr(GT) si un attribut a pour valeur une chaine contenant un GT non échappé (pas sûr que ce soit valide, à vérifier).
    Plus je connais de langages, plus j'aime le C.

  5. #5
    Expert éminent sénior
    m'est avis qu'il veut justement éviter une usine à gaz
    Vu la simplicité des choses, c'est largement plus du NIH (not invented here) qu'autre chose.

  6. #6
    Débutant
    J'utilise déjà un framework du parsing xml mais l'un des fichiers parsé contient des caractères spéciaux et des balises de mise en page HTML causant des problèmes au framework du parsing XML... c'est pourquoi je demande des méthodes autres que les méthodes du parsing et non plus la volonté de compliquer la vie

    Merci beaucoup pour vos retours, je pense que la méthode la plus pratique est d'utiliser les fonctions find et erase.

  7. #7
    Expert éminent sénior
    Ok, @fraisa1985, tu te compliques pas inutilement la vie pour rien.
    J'ai tendance à prendre les outils de plus au niveau au lieu de me prendre la tête (l'optimisation, c'est après un truc qui fonctionne correctement).
    Donc, avec mon approche de fainéant, Je "corrigerais" le problème en amont, en rendant votre XML valide.
    Pour ce type de bidouille, XSLT est très pratique et permet d'avoir une "vue" assez explicite des changements effectuées.

  8. #8
    Expert confirmé
    Citation Envoyé par fraisa1985 Voir le message
    J'utilise déjà un framework du parsing xml mais l'un des fichiers parsé contient des caractères spéciaux et des balises de mise en page HTML causant des problèmes au framework du parsing XML...
    Si je comprends bien, dans le XML, on a des passages du genre <TRUC texte="<b>chose</b>"/>
    au lieu de <TRUC texte="&lt;b&gt;chose&lt;/b&gt;"/> ?
    Si c'est le cas, alors il y a de grosses bêtises à corriger en amont. En particulier :
    • S'il s'agit de gens qui ont édité le XML à la main, il faut corriger l'organisation et les faire passer par un outil.
    • S'il s'agit d'un outil fait maison qui écrit mal le XML, il faut reprogrammer l'outil et le faire utiliser des classes déjà existantes pour écrire des XML. Par exemple, il y en a dans Qt. Il y a aussi TinyXml.
    • S'il s'agit d'un fichier qui vient d'une source extérieur, par exemple un client, il faut peut-être essayer d'éduquer cette source extérieur à produire des fichiers XML corrects.
      Sinon, chaque fois qu'une nouvelle connerie apparaîtra dans un fichier XML reçu, cela demandera un nouveau développement ou de nouvelles corrections manuelles, ce qui coûtera de l'argent.
      D'ailleurs, l'éducation, ça doit se faire le plus tôt possible. Plus on attend, plus c'est difficile de demander de changer.