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

XML Discussion :

Parsing de fichier XML en C


Sujet :

XML

  1. #1
    Rédacteur
    Avatar de longbeach
    Profil pro
    Architecte de système d’information
    Inscrit en
    Avril 2003
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Avril 2003
    Messages : 943
    Par défaut Parsing de fichier XML en C
    Bonjour,
    En C,
    Je dois parser un fichier XML afin de supprimer certains caracteres indesirables ( des caracteres ASCII
    et des signes > et < ).
    Existe-t-il un parser qui permet de faire ça rapidement ? Sachant que la taille du fichier XML
    peut varier de 5 MB à 300 MB.
    Quelqu'un a t'il deja implemente une telle solution ?

    Ou sinon quelqu'un a t'il deja ecrit un tel programme, sans faire appel à un parser ?

    Merci pour vos pistes et suggestions.

  2. #2
    Membre éclairé Avatar de ronan99999
    Inscrit en
    Juillet 2003
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juillet 2003
    Messages : 279
    Par défaut
    Tu as un trés bon parseur disponible ici:
    http://xmlsoft.org/

  3. #3
    Rédacteur
    Avatar de longbeach
    Profil pro
    Architecte de système d’information
    Inscrit en
    Avril 2003
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Avril 2003
    Messages : 943
    Par défaut
    Merci
    tu as un exemple simple d'utilisation sur un fichier XML, pour l'appliquer à mon cas ?
    Sinon je suis preneur d'autres parseurs ou solutions (mais en C).

  4. #4
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Salut

    Si tes fichiers contiennent des < > dans les données, alors ce ne sont pas des fichiers xml => ce n'est pas un parser xml qu'il te faut

  5. #5
    Membre éclairé Avatar de ronan99999
    Inscrit en
    Juillet 2003
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juillet 2003
    Messages : 279
    Par défaut
    Exact, il ne passeront pas dans un parser xml->document mal formé

    Tu peux donner un exemple d'un de tes exemples de document à corriger.

    Les erreurs se situe dans les noms de sections attributs....?
    Tu peux peut-etre te'n tirer avec des expressions réguliéres (malheureusement ce ne sera pas forcément trés rapide) ?

  6. #6
    Rédacteur
    Avatar de longbeach
    Profil pro
    Architecte de système d’information
    Inscrit en
    Avril 2003
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Avril 2003
    Messages : 943
    Par défaut
    pourquoi ce n'est pas un fichier XML ?
    Je pense que ça reste un fichier XML, mais mal formé.
    L'utilisation de parser n'est vraiment pas possible du coup ?

    Je n'ai pas de fichier exemple mais je pense par exemple que ça pourrait être ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    <?xml version="1.0" encoding="ISO-8859-1"?>     
    <titi>
    <toto> bla > blabla </toto>   // caractere > à remplacer par un blanc
    </titi>
    Et dans un 2eme temps j'aurai un autre type de caractères à supprimer, des carrés:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    <?xml version="1.0" encoding="ISO-8859-1"?>     
    <titi>
    <toto> bla *signesCarrés*  blabla </toto>   // les caracteres carrés à remplacer par un blanc
    </titi>
    Merci

  7. #7
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Ca depend où sont placés les < >
    Qu'est ce que tu veux que le parser fasse lorsqu'il rencontre ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <abc> texte texte <def texte texte texte</abc>
    ?

    Il risque de croire que "def" est un element et "texte" sont des attributs.
    C'est ce qu'il se pase chez firefox, dans une page html de ce style : tout ce qu'il ya entre <def et avant </abc> est jarté

    C'est défini nulle part ces comportements, tout simplement parce que c'est plus du xml.

    Pour les signes carrés, je pense pas que ça pose probleme, tant que c'est valide pour le charset donné.

  8. #8
    Rédacteur
    Avatar de longbeach
    Profil pro
    Architecte de système d’information
    Inscrit en
    Avril 2003
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Avril 2003
    Messages : 943
    Par défaut
    Donc ce que tu me dis c'est qu'il n'est pas possible de parser un fichier XML non valide ?
    C'est vrai aussi que je n'ai pas de DTD ou schéma XML sur lesquels m'appuyer.

    Quelles solutions preconisees vous dans ce cas là ?
    Comment faire ?

    Merci

  9. #9
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Je dis juste qu'on sait pas ce que va faire le parser, mais si tu veux faire des essais pour les charger avec libxml, peut etre que le resultat serait satisfaisant.

    Je preconiserais de faire sa propre moulinette (en langage de scripts, plus facile qu'en C, on peut utiliser les expressions regulieres et tout ça), en ayant connaissance des cas qui se presentent.
    Si tu connais la liste des tags (sans avoir de DTD), tu peux recuperer tous les <> qui ne concernent pas l'ouverture et la fermeture de ces tags

  10. #10
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Peut-on utiliser une solution similaire à xhtml en remplacer '<' et '>' par &lt; et &gt; respectivement?

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  11. #11
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Bein oui, mais il faudrait pas remplacer les <> qui concernent les balises du xml du fichier

    Sinon, si tu avais les moyens de regenerer ces fichiers, l'ideal serait d'entourer le texte d'une section CDATA

  12. #12
    Rédacteur
    Avatar de longbeach
    Profil pro
    Architecte de système d’information
    Inscrit en
    Avril 2003
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Avril 2003
    Messages : 943
    Par défaut
    je pense effectivement qu'il vaut mieux que je passe pas les epxressions regulieres, et que je laisse tomber le parsing.

    Dans ce cas, avez-vous des idées ? Je suis sous Unix :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     sed -e 's/>/eee/' exemple.xml > newfile
    Par exemple, la merveilleuse commande sed me remplace les caractères > par eee mais evidemment ça va me remplacer les > des balises XML aussi, ce que je ne veux pas. Comment faire pour exclure les balises de la substitution ?

    Merci

  13. #13
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Ca doit etre faisable en une seule commande sed, mais elle doit etre super complexe, et je connais pas sed
    J'aurais plutot vu ça au travers d'un algo :
    1) recuperer les tags et leurs positions
    2) pour chaque morceau de chaine entre les tags, remplacer les <> (et les caracteres chiants)

    Je pensais à un script php avec un coup de preg_match_all (avec l'option PREG_OFFSET_CAPTURE) et une boucle qui recrée la chaine complete en traitant les souschaines entre les tags.

Discussions similaires

  1. Parsing de fichier XML
    Par winflow dans le forum C#
    Réponses: 5
    Dernier message: 06/02/2014, 08h19
  2. [JDOM] Problème avec le parsing du fichier XML
    Par nounouuuuu201186 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 10/02/2012, 14h08
  3. Parsing de fichiers XML : Exception bien bizarre
    Par Grumpy64 dans le forum Android
    Réponses: 11
    Dernier message: 06/11/2010, 14h32
  4. Réponses: 3
    Dernier message: 14/11/2009, 09h26
  5. [SAX] Resultat d'un parsing de fichier XML
    Par t.n.b.g dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 07/03/2008, 16h12

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