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

Langage Delphi Discussion :

Validation de XML par XSD sans MSXML


Sujet :

Langage Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Validation de XML par XSD sans MSXML
    Bonjour, j'utilise Delphi 2005 Architect. Je suis actuellement à la recherche d'une solution me permettant de valider un fichier XML grace a un fichier XSD.

    Sur la FAQ, il y a un exemple de code se basant sur l'active X MSXML. Une de mes contraintes est de ne pas utiliser d'active X. Je voudrais savoir s'il existe des composants qui gerent cela en natif en Delphi, et si oui, lesquels.

    J'ai deja parcouru le net, j'ai regardé un certain nombre de composants (comme XML inspector, Open XML, Xmlparster, et quelques autres) et je n'ai rien trouvé, sans succès pour l'instant.

    Je vous remercie par avance.

  2. #2
    Membre éprouvé
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Points : 1 177
    Points
    1 177
    Par défaut
    Si tu est en .Net (après quelques recherches) a priori il devrait y avoir ce qu'il faut dans System.Xml.Schema
    Si tu es en Win32, il n'y a pas de choix énorme à part le coup de MSXML (objet COM)

    Au passage, MS nous dit :
    "INFO : utilisation de MSXML est Non pris en charge dans .NET Applications"
    voir http://support.microsoft.com/default.aspx?scid=kb;en-us;815112

    Voici une utilisation du code de la FAQ (avec MSXML pour Delphi win32) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    procedure TForm1.actValiderSchemaExecute(Sender: TObject);
    var
      vXSDFileName,
      vXMLFileName: string;
    begin
      if mmXML.Modified or docXML.IsEmptyDoc then
        docXML.XML := mmXML.Lines;
     
      if mmXSD.Modified or docXSD.IsEmptyDoc then
        docXSD.XML := mmXSD.Lines;
     
      // Afin d'obtenir le n° de ligne/caractère en cas d'erreur
      //   on utilise ValidateXMLFileName() (avec des fichiers temporaires)
      try
        vXSDFileName := IncludeTrailingPathDelimiter(GetTempDir)+'temp.xsd';
        mmXSD.Lines.SaveToFile(vXSDFileName);
     
        vXMLFileName := IncludeTrailingPathDelimiter(GetTempDir)+'temp.xml';
        mmXML.Lines.SaveToFile(vXMLFileName);
     
        ValidateXMLFileName(vXMLFileName, vXSDFileName, '');
     
        MessageDlg('Document XML conforme au schéma.', mtInformation, [mbOK], 0)
      except
        on E: EXMLDOMValidationError do
          begin
            pgCtrlPrincipal.ActivePage := tabXML;
            with E do
              begin
                FLigneEnErreur := Line;
                mmXML.CaretY := Line;
                mmXML.CaretX := LinePos;
                mmXML.Repaint;
              end;
            raise;
          end;
      end;
    end;
    (mmXML est un TSynMemo, docXML et docXSD sont des TXMLDocument)
    "Si vous voulez être l’esclave des banques et payer pour financer votre propre esclavage, alors laissez les banquiers créer la monnaie" - Josiah Stamp, 1920, Gouverneur de la Banque d’Angleterre
    "Qui ne peut acheter ruine qui voudrait vendre" - Jacques Duboin.
    "Nous n'héritons pas la terre de nos parents, nous l'empruntons à nos enfants." - Antoine de Saint Exupéry

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2002
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 30
    Points : 25
    Points
    25
    Par défaut
    Au passage, MS nous dit :
    "INFO : utilisation de MSXML est Non pris en charge dans .NET Applications"
    voir http://support.microsoft.com/default.aspx?scid=kb;en-us;815112
    Voilà qui pose le problème crucial de l'évolution des applications.
    Ceux qui ne souhaitent pas passer sur .NET ne pourront pas maintenir longtemps leurs applis si l'on suit cette logique ... qu'est ce que je peux détester ça ! grrrrrr !

    Mais au passage merci pour ce bout de code ... je comptais justement implémenter ce genre de validation sous Delphi !

  4. #4
    Futur Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Merci pour cet exemple d'utilisation du code de la FAQ. J'ai testé et ca fonctionne tres bien.

    J'ai presenté la solution technique et on m'a dit : "pas bien MSXML, trouve autre chose"

    Donc j'etais un peu deçu. Je regarde du coté de Xerces, compilé en C++, pour voir si y a pas moyen de l'integrer a Delphi plus ou moins directement.

    Si jamais vous avez des billes la dessus, je suis preneur

Discussions similaires

  1. [2.2.2] Valider les données XML par XSD
    Par Epsilon38 dans le forum BIRT
    Réponses: 3
    Dernier message: 25/03/2009, 15h52
  2. [SAX] Validation XML par XSD
    Par KernelControl dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 21/01/2009, 14h46
  3. Validation XML par XSD
    Par jago31 dans le forum C#
    Réponses: 5
    Dernier message: 14/05/2008, 08h01
  4. [XSD][Java]Valider un XML par rapport a un XSD
    Par sikapoch dans le forum Valider
    Réponses: 11
    Dernier message: 08/11/2005, 15h21
  5. Réponses: 3
    Dernier message: 27/01/2004, 16h15

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