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

Composants VCL Delphi Discussion :

Utilisation de TXMLDocument


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 141
    Par défaut Utilisation de TXMLDocument
    Bonjour!
    J'ai un petit problème...
    J'utilise DELPHI 2005 (édition professionnelle) et j'écris des données dans un fichier XML grace à la classe TXMLDocument (je suis dans un projet Win32). L'écriture dans ce fichier ne pose aucun problème sauf que je dois absolument rajouter dans ce fichier XML (juste en dessous de la version du XML) la référence du fiche XSL pour pouvoir générer un fichier au format HTML. Le plus simple est de prendre un ptit exemple:

    voila ce que j'arrive à écrire avec TXMLDocument:
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <livres>
      <livre1>l'avare</livre1>
      <livre2>la marre au diable</livre2>
    </livres>
    tout ça marche bien mais moi je voudrais écrire:
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <?xml-stylesheet type="text/xsl" href="monFichierXSL.xsl"?>
    <livres>
      <livre1>l'avare</livre1>
      <livre2>la marre au diable</livre2>
    </livres>
    Voila ce que je voudrais, la deuxième ligne me permettrait alors de générer de l'HTML. Or pour l'instant je ne sais pas écrire cette ligne avec la classe TXMLDocument (je ne trouve aucune propriété me permettant cela).

    Quelqu'un voit-il comment faire?

    Merci
    Ps: j'ai essayer d'écrire cette ligne directement en texte avec Writeln avant d'écrire mon XML avec XMLDocument mais lorsque j'écris ce XML ma ligne de texte est écrasée.

  2. #2
    Membre expérimenté

    Profil pro
    Enseignant
    Inscrit en
    Juillet 2003
    Messages
    296
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juillet 2003
    Messages : 296
    Par défaut
    Je suis plus très sûr, mais il me semble qu'il y a une propriété Prolog
    ça doit être ça...

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 141
    Par défaut
    Big a dit:
    Je suis plus très sûr, mais il me semble qu'il y a une propriété Prolog
    Merci de t'intéresser à mon problème Big. Ce matin j'ai voulu essayer avec prolog mais TXMLDocument ne contient aucune propriété sous ce nom!!!

  4. #4
    Membre confirmé Avatar de phplive
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 179
    Par défaut
    Bjr

    Je sais pas si ca marche vraiment mais tu peux essayer en passant par une stringlist

    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
    ...
    var
      IRootNode : IXMLNode;
      XML : TStringList;
    begin
      XMLDocument1.Active := True;
     
      XML := TStringList.Create;
      XML.AddStrings(Self.XMLDocument1.XML);
      XML.Insert(1,'<?xml-stylesheet type="text/xsl" href="monFichierXSL.xsl"?>');
      XMLDocument1.XML.clear;
      XMLDocument1.XML.AddStrings(XML);
      XMLDocument1.Active := False;
      XMLDocument1.Active := True;
      XML.Free;
    end;

    A priori ca génrère pas d'erreur qd à soavoir si c'est bon ...

    @+
    Php

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 141
    Par défaut
    phplive a dit:
    Je sais pas si ca marche vraiment mais tu peux essayer en passant par une stringlist
    J'ai donc essayé d'inclure ton code dans mon source et il est vrai que cela ne cause aucune erreur ni à la compilation ni à l'exécution, ceci dit cela ne change pas le contenu de mon fichier XML.

  6. #6
    Membre confirmé Avatar de phplive
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 179
    Par défaut
    Bjr


    Arrrrghhhh autant pour moi ! Tu oublies cette solution et essai avec

    Code pour voir ce qui se trouve dans l'entête (il faut ajouter un TMemo sur la fiche)

    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
    procedure TForm1.Button2Click(Sender: TObject);
    var
      IPrologNode,INode : IXMLNode;
      i : Integer;
      Info : String;
    begin
      XMLDocument1.Active := True;
     
     
      Info := '';
      for i:=0 to XMLDocument1.ChildNodes.count-1 do
      begin
        INode := XMLDocument1.ChildNodes[i];
     
        Info := 'ChildNodes['+IntToStr(i)+'].';
        Memo1.Lines.Add(Info+'LocalName = '+INode.LocalName);
        Memo1.Lines.Add(Info+'NodeType = '+
          GetEnumName(TypeInfo(TNodeType),Ord(INode.NodeType)));
        if INode.IsTextElement then
          Memo1.Lines.Add(Info+'IsTextElement = True')
        else
          Memo1.Lines.Add(Info+'IsTextElement = False');
        if (INode.NodeType in [ntAttribute,ntText,ntCData,ntProcessingInstr,ntComment]) or
          ((INode.NodeType = ntElement) and INode.IsTextElement) then
          Memo1.Lines.Add(Info+'Value = '+ INode.NodeValue);
     
      end;
    end;

    Code pour insèrer un autre entête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TForm1.Button3Click(Sender: TObject);
    var
      IPrologNode,INode : IXMLNode;
    begin
      XMLDocument1.Active := True;
     
      IPrologNode := XMLDocument1.CreateNode('xml-stylesheet',
        ntProcessingInstr,
        'type="text/xsl" href="monFichierXSL.xsl"');
      XMLDocument1.ChildNodes.Insert(1,IPrologNode);
     
      // Si Options.doAutoSave = False sinon pas nécessaire
      // XMLDocument1.SaveToFile;
    end;

    Si l'option dsAutoSave du document XML n'est pas activée alors tu dois appeler explicitement XMLDocument1.SaveToFile([fichier.xml])


    @+
    Php

Discussions similaires

  1. Réponses: 4
    Dernier message: 29/07/2008, 13h52
  2. Pb d'utilisation de TXmlDocument hors d'une fiche.
    Par psau dans le forum C++Builder
    Réponses: 3
    Dernier message: 14/03/2006, 10h19
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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