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++Builder Discussion :

[xml] Récupérer le numéro de la ligne d'erreur d'un fichier


Sujet :

C++Builder

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 37
    Points : 20
    Points
    20
    Par défaut [xml] Récupérer le numéro de la ligne d'erreur d'un fichier
    Bonjour!

    Apres avoir ete aider pour la lecture d'un doc XML (merci BebeOurs), j'aurais besoin de vos lumieres sur le meme sujet...

    Voila, lorsque la propriete "Active" du XMLDocument est mis a "true", le composant analyse le fichier xml souhaite. Or s'il existe une erreur dans ce fichier, il est possible de recuperer le numero de la ligne ou se situe l'erreur et ceci grace a "EDOMParseError::Line"

    Explication par Borland:
    EDOMParseError::Line
    Indique la ligne du document XML dans laquelle l'analyseur a rencontré une erreur.
    __property int Line = {read=GetLine, nodefault};

    Description
    Line est la ligne du document XML dans laquelle l'analyseur a détecté l'erreur.
    L'explication de EDOMParseError:
    EDOMParseError constitue la classe des exceptions pour les erreurs se produisant lorsqu'une implémentation DOM analyse un document XML.

    Description
    EDOMParseError est déclenchée lorsque TXMLDocument rencontre une erreur pendant l'analyse d'un document XML. Il enveloppe les informations disponibles dans l'interface IDOMParseError de l'implémentation DOM.
    Voila, quelqu'un pourrait il me dire comment utiliser ceci...?!?

  2. #2
    Membre du Club Avatar de benoitB
    Profil pro
    Inscrit en
    Août 2002
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 78
    Points : 68
    Points
    68
    Par défaut il faut gérer les exceptions
    EDOMParseError est une exception, il faut que tu la gére avant d'utiliser les données contenues dans ton fichier XML.

    La procédure est la suivante :

    1- ouverture du fichier XML
    2- vérification de sa correction SYNTAXIQUE (toutes les balises ouvertes SONT refermées par exemple)
    3- utilisation des données qui y sont contenues
    4- ben fermeture

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    1- ouverture du fichier XML
    2- vérification de sa correction SYNTAXIQUE (toutes les balises ouvertes SONT refermées par exemple)
    3- utilisation des données qui y sont contenues
    4- ben fermeture
    En fait la demarche correspond a ce que je fait mais le probleme est le suivant.

    J'utilise un fichier XML cree par une application dont je n'ai le controle. Ce fichier contient un noeud ayant pour nom un nombre! Par exemple:
    Sous Borland des l'activation de la propriete "Active" avec true, un message d'erreur me signal le numero de ligne correspondant au noeud de l'exemple (<078>). Mon idee etait de recuperer le numero de la ligne d'erreur et de supprimer completement le noeud correspondant a la ligne

    Par exemple mon noeud <078> se situe a la ligne numero 6 de mon fichier XML, un message d'erreur apparaitera me signalant, "Non commencé avec un caractère valide. Ligne 6 <078>...</078>"

    Voila, il me faut donc juste recuperer le numero de la ligne ou se situe l'erreur, a savoir que s'il existe d'autre erreur il me faudrait refaire la manip de suppression de la ligne, <078> peut tres bien etre un autre noeud du meme type par exemple <034> ou encore <02>.

    Merci beaucoup a celui qui pourra m'aider...

  4. #4
    Membre du Club Avatar de benoitB
    Profil pro
    Inscrit en
    Août 2002
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 78
    Points : 68
    Points
    68
    Par défaut pas de chiffre en premier
    une balise NE PEUT PAS commencer par un chiffre, à la limite un underscore puis un chiffre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <_078>
    ...
    </_078>
    Mais PAS DE CHIFFRE en premier...

    Vas voir les spécifications au W3C

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    Effectivement c'est bien ce que j'ai remarque... le probleme est, que le fichier XML a lire n'est pas de ma creation et je cherche donc a retirer ces noeuds "erreur" ou alors de les renommer par <A10> au lieu de <10> (Aucun rapport avec l'autoroute du meme nom...IoI)

    Voila le probleme reste entier, comment puis je obtenir le numero de la ligne de ce noeud "erreur"?!?

    Et puis plus ca va, plus je cherche moins ca va...

    J'ai pense a analyser chaque ligne du fichier XML et de verifier deriere le caractere '<' s'il y a un ciffre ou non, mais comme vous l'imaginer, le periple est grand! alors que de le faire par le composant XML de Builder serait si simple... :-(

  6. #6
    Membre du Club Avatar de benoitB
    Profil pro
    Inscrit en
    Août 2002
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 78
    Points : 68
    Points
    68
    Par défaut
    oui c'est évident mais la tu te heurtes aux spécifications du langage XML lui-même, la solution serait :
    1- faire une copie du fichier pour conserver l'original intact
    2- relire entièrement la copir en ajoutant systématiquement un caractère (ou une chaîne) aux noeuds _ ou # par exemple ou BenoitEstLeMeilleur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <001>
    ...
    </001>
    devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <_001>
    ...
    </_001>
    3- charger ce fichier & travailler avec

    Autrement je vois pas...

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    Non mais attend on est daccord depuis le debut! IoI
    Je vois bien le probleme avec mes noeud chiffres, le probleme n'est pas le pourquoi du message d'erreur, j'ai bien constate et ce depuis le debut, qu'il faut que mes noeuds porte un nom sans avoir un chiffre comme premier caractere...

    Ce que j'aimerais savoir c'est si quelqu'un connait le moyen de coder avec C++Builder la propriete permettant de recuperer le numero de ligne d'erreur d'un fichier XML avec:
    EDOMParseError::Line
    Indique la ligne du document XML dans laquelle l'analyseur a rencontré une erreur.
    __property int Line = {read=GetLine, nodefault};

    Description
    Line est la ligne du document XML dans laquelle l'analyseur a détecté l'erreur.

    Pour ce qui est du principe j'ai bien compris la logique d'action, mais voila ce que je n'arrive pas obtenir c'est les lignes de code pour l'utilisation de la propriete Line de l'EDOMParse...

    Merci d'avance.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    Apres de nombreuses heures de recherche, j'ai enfin trouve le fameux "Comment ca marche"!

    Voici donc la solution!

    EDOMParseError peut etre scrute par un simple try/catch, il suffit alors de faire ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      try
      {
            XMLDoc->Active = true;
      }
     
      catch (EDOMParseError &NumLigne)
      {
            TStringList *Erreur=new TStringList;
            int i = NumLigne.EDOMParseError::Line; //Recuperation du numero de la ligne
            Erreur->LoadFromFile("Fichier.xml"); //Chargement du fichier contenant l'erreur
            Erreur->Strings[i-1] = "";  //Suppression de la ligne d'erreur
            Erreur->SaveToFile("FichierModifier.xml");  //Sauvegarde du fichier modifie
      }
    Ce petit bout de code vous effacera la ligne contenant l'erreur mais toute autre action pourra etre effectuee a la place.

    Tout simplement! En esperant que cela pourra aider quelqu'un!

    Nota: Les autres erreurs d'un TXMLDocument doivent pouvoir etre gerees de la meme facon... A suivre...

    C'est resolu!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/05/2010, 20h30
  2. récupérer le numéro de la ligne courante d'un fichier txt en javascript
    Par developppez dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 08/06/2008, 18h29
  3. Réponses: 3
    Dernier message: 07/01/2008, 17h12
  4. [C] récupérer le numéro de la ligne
    Par kynri dans le forum Windows
    Réponses: 13
    Dernier message: 08/12/2007, 12h24
  5. Récupérer le numéro de la ligne sélectionnée dans une variable?
    Par drthodt dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/10/2007, 11h48

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