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

C# Discussion :

[XML] Comparaison de 2 fichiers XML


Sujet :

C#

  1. #1
    Membre du Club Avatar de AdriM
    Inscrit en
    Mars 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 70
    Points : 66
    Points
    66
    Par défaut [XML] Comparaison de 2 fichiers XML
    Salut!

    Je cherches à comparer 2 fichiers XML pour prouver qu'ils sont identiques. Malheureusement le fichier géré contient des élements inutiles mais qui ne changent pas le sens du fichier.

    Par exemple:

    <INPUT number="1">
    <LEVEL xmlns="">1</LEVEL>
    <DEBOUNCETIME xmlns="">20</DEBOUNCETIME>
    <OSCILLATIONTIME xmlns="">100</OSCILLATIONTIME>
    <MAXNUMCHANGES xmlns="">2</MAXNUMCHANGES>
    <TYPE xmlns="">0</TYPE>
    <RTDB xmlns="">
    est la même chose que:

    <INPUT number="1">
    <LEVEL>1</LEVEL>
    <DEBOUNCETIME>20</DEBOUNCETIME>
    <OSCILLATIONTIME>100</OSCILLATIONTIME>
    <MAXNUMCHANGES>2</MAXNUMCHANGES>
    <TYPE>0</TYPE>
    <RTDB xmlns="">
    Quelqu'un connait un moyen de créer une methode pour comparer ces deux fichiers?

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2007
    Messages : 180
    Points : 198
    Points
    198
    Par défaut
    Tu peux récupérer le nom des noms.
    Dans un premier temps, tu récupéres le nombre de noeud de ton ou tes fichiers, puis tu peux descendre et comparer le nom des noms.

    Je pense que les xmlns="" ne vont pas ressortir dans la propriété name du noeud.
    Une légende amérindienne raconte qu'il y eut un immense incendie de forêt. Tous les animaux terrifiés et atterrés observaient, impuissants, le désastre. Seul, un colibri s'activait et allait chercher quelques gouttes d'eau dans son bec pour éteindre le feu.
    Au bout d'un moment, le tatou, agacé par ses agissements dérisoires, lui dit :
    'Colibri ! N'es-tu pas fou ? Tu crois que c'est avec ces gouttes d'eau que tu vas éteindre le feu ?
    'Je le sais, répond le colibri, mais je fais ma part...

  3. #3
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par AdriM Voir le message
    Salut!

    Je cherches à comparer 2 fichiers XML pour prouver qu'ils sont identiques. Malheureusement le fichier géré contient des élements inutiles mais qui ne changent pas le sens du fichier.
    Sauf qu'il n'y que toi qui sache que cela ne change pas le "sens" du fichier (Comment ? un fichier Xml a un sens et personne il m'a jamais rien dit )

    Donc la seule solution que je vois ici est de lister les noeuds d'un des fichiers un à un, et pour chaque noeud trouvé dans le fichier "A" aller chercher le noeud correspondant dans le fichier "B" et comparer si les infos contenues sont identiques pour toi, après avoir vérifié que les deux fichiers contiennent le même nombre de noeuds. (A vue de nez, ça doit pouvoir se faire sans trop de code avec une implémentation "sioux" des interfaces IEquatable & IEqualityComparer) De cette manière, tu te protéges notamment contre des différences dans l'ordre des noeuds de deux fichiers au contenu sémantiquement identique.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  4. #4
    Membre du Club Avatar de clodo13
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 67
    Points : 58
    Points
    58
    Par défaut
    --->Parcours le premiers fichier
    ---->stock toutes les données que tu trouve dans un string

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string_total = string_courant+string_total
    ---->Tu fais pareil pour le deuxieme
    ---->Tu compare les deux string_total1 et string_total2
    --->pour cela tu peux utiliser la fonction string.equals je crois


    cordialement
    @+

  5. #5
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par clodo13 Voir le message
    --->Parcours le premiers fichier
    ---->stock toutes les données que tu trouve dans un string

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string_total = string_courant+string_total
    ---->Tu fais pareil pour le deuxieme
    ---->Tu compare les deux string_total1 et string_total2
    --->pour cela tu peux utiliser la fonction string.equals je crois
    Sauf que cette méthode peut donner des faux négatifs pour la raison que j'ai mentionnée supra (et aussi des "faux positifs" d'ailleurs, si un noeud avec une valeur X existe dans le fichier A et un attribut avec une valeur identique dans ler fichier B, même si ce cas est beaucoup moins probable).

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  6. #6
    Membre du Club Avatar de clodo13
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 67
    Points : 58
    Points
    58
    Par défaut
    L'ordre est important ou pas?

  7. #7
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par clodo13 Voir le message
    L'ordre est important ou pas?
    Dans son cas, je ne sais pas, mais a priori il n'y a pas de raison de considérer comme différent un fichier où il y aurait

    <INPUT number="1"/>
    <INPUT number="2"/>

    et un autre où il y aurait

    <INPUT number="2"/>
    <INPUT number="1"/>

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  8. #8
    Membre éclairé Avatar de zeavan
    Architect
    Inscrit en
    Avril 2003
    Messages
    590
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Autre

    Informations professionnelles :
    Activité : Architect

    Informations forums :
    Inscription : Avril 2003
    Messages : 590
    Points : 774
    Points
    774
    Par défaut
    Je vois plusieurs possibilites toutes plus moches les unes que les autres.

    mais bon ...
    en voila une :
    tu parcours ton 1er fichier xml a l'aide de xpath ou autre et tu recupere chaque node.

    a chaque node recupere tu verifie son existance dans le 2eme fichier.

    si non(differents)

    si oui (tu remove cette meme node de ton 2eme fichier et tu recommence l'operation avec la prochaine node).

    Autre possibilite
    tu transforme tes 2 fichiers xml en dataset.
    ensuite tu compare leur schema (si valide) , tu verifie le contenu.

    maintenant comment verifier le contenu (l'histoire de l'ordre)
    et bien tu rajoute a chaque row de chaque table du second et premier dataset une column isCheck.

    ensuite apres la fin de toutes les comparaisons si toutes les rows de tous les datatables de tes 2 datasets n'ont pas leur column isCheck(Checker) alors problemes.

    si j'ai manque de clarte , n'hesite pas j'essaierai d'etre plus explicite.

  9. #9
    Membre du Club Avatar de AdriM
    Inscrit en
    Mars 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 70
    Points : 66
    Points
    66
    Par défaut
    Merci pour tout vos conseils...

    Premièrement, j'ai changé ma forme de gérer mon fichier XML, ça m'evitera de gérer des trucs inutiles

    La comparaison etait surtout pour faire un test de mon "generateur", pour vérifier qu'il gère un truc valide...

    Je vais explorer la solution du dataset, ça me semble pas mal!

  10. #10
    Membre du Club Avatar de clodo13
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 67
    Points : 58
    Points
    58
    Par défaut
    Tu peux améliorer significativement la performance si tu teste par exemple le nombre de noeud présent avant de parcouirir.
    Comme sa tu sais dés le début qu' ils sont differents


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

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/12/2008, 13h38
  2. Réponses: 1
    Dernier message: 22/04/2008, 11h24
  3. Réponses: 3
    Dernier message: 06/08/2007, 03h44
  4. [DOM] (org.w3c.dom) copier un noeud d'un fichier XML dans un autre fichier XML
    Par snoop dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 13/02/2007, 17h22
  5. Importer le contenu un fichier xml dans un autre fichier xml
    Par gedeon555 dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 27/07/2005, 11h49

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