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 :

Génération de XML


Sujet :

C++Builder

  1. #1
    Membre averti
    Avatar de Julien.alkaza
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    239
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 239
    Points : 363
    Points
    363
    Par défaut Génération de XML
    Salut à tous et à toutes...

    Voici mon problème :
    J'ai un fichier XML qui est composé comme ceci :
    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
     
    <Devices>
     
     <Device>
      <Model>HP LaserJet 4200</Model> 
      <Desc>Sv. Assurances / L.Martin</Desc> 
      <SerialNum>CNHX206189</SerialNum> 
      <PtrFirmwareVersion>04.017.3</PtrFirmwareVersion> 
      <PtrFirmwareRev>20031217</PtrFirmwareRev> 
      <IPAddr>192.6.8.66</IPAddr> 
      <HWAddr>0001E6978C50</HWAddr> 
      <CAP_INSTALLED_RAM>64</CAP_INSTALLED_RAM> 
      <JDModel>J6057A</JDModel> 
      <JDRev>R.25.15,CIDATE 05/14/2004</JDRev> 
      </Device>
     <Device>
      <Model>HP DesignJet 750C</Model> 
      <Desc>HP DesignJet 750C</Desc> 
      <IPAddr>192.6.11.210</IPAddr> 
      <HWAddr>0060B0114176</HWAddr> 
      <CAP_INSTALLED_RAM>36</CAP_INSTALLED_RAM> 
      <JDModel>J2550B</JDModel> 
      <JDRev>A.08.49</JDRev> 
      </Device>
     <Device>
      <Model>HP LaserJet 5Si</Model> 
      <Desc>HP Laserjet 5Si</Desc> 
      <SerialNum>NLQK050572</SerialNum> 
      <IPAddr>192.6.3.193</IPAddr> 
      <HWAddr>0060B09A7D56</HWAddr> 
      <JDRev>A.08.49</JDRev> 
     </Device>
    </Devices
    Je dois l'adapter à un logiciel (TrackIT) pour pouvoir l'importer. Je sais comment je dois modifier les champs. Le truc, c'est que pour chaque "device" je dois générer un fichier XML.
    Comment dois je faire pour compter le nombre de "device", et pour lire les valeurs???

    J'ai regardé les autres posts, mais j'ai pas tout compris!!!


    Merci
    P.S : j'utilise un TXMLDocument

    Julien
    Admin Réseaux & Systèmes.

    Red Hat Certified Technician...#604006101698235

  2. #2
    Membre averti
    Avatar de Julien.alkaza
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    239
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 239
    Points : 363
    Points
    363
    Par défaut
    Salut,

    Je vois que personne n'a pu répondre!!!
    Bon, j'ai pas mal avancé!!!!!
    J'utilise l'expert de liaison de données. J'arrive à générer le fichier type pour la récupération, et celui pour l'écriture.

    J'arrive à récupérer (à l'aide des fonctions dans le fichier de l'expert) toutes les données sur les imprimantes.
    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
     
    //Analyse du doc XML
    _di_IXMLDevicesType Devices = GetDevices(Doc1);
     
    nbimp = Devices->Count;
    Label4->Caption = nbimp;
    for (int i=0;i<nbimp;i++)
    {
    _di_IXMLDeviceType Device = Devices->Get_Device(i);
    model = Device->Get_Model();
    Desc = Device->Get_Desc();
    IPaddr = Device->Get_IPAddr();
    MACaddr = Device->Get_HWAddr();
    serial = Device->Get_SerialNum();
    JDmodel = Device->Get_JDModel();
    JDrev = Device->Get_JDRev();
    FirmVersion = Device->Get_PtrFirmwareVersion();
    FirmRev = Device->Get_PtrFirmwareRev();
    Ram = Device->Get_CAP_INSTALLED_RAM();
    ...
    ...
    Mais, pour ré-écrire, j'ai un doute. Voilà ce que je fais :
    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
     
    _di_IXMLWorkstationType WorkStation = NewWorkstation();
     
     
    WorkStation->Set_Number((WideString)nbvar);
    WorkStation->Set_AuditDate(200506040800);
    WorkStation->Set_CompType(0);
    WorkStation->Set_Type("baseline");
    WorkStation->Set_Name("");
    WorkStation->Set_Position("");
    WorkStation->Set_Phone("");
    WorkStation->Set_Fax("");
    WorkStation->Set_FaxExt("");
    WorkStation->Set_PhoneExt("");
    WorkStation->Set_EMail("");
    WorkStation->Set_Dept("");
    WorkStation->Set_DeptNum("");
    WorkStation->Set_Location("");
    WorkStation->Set_Network("IMPRIMANTE");
    WorkStation->Set_UserDef1(Desc);
    WorkStation->Set_UserDef2("");
    WorkStation->Set_UserDef3("");
    WorkStation->Set_UserDef4("");
    WorkStation->Set_UserDef5("");
    WorkStation->Set_UserDef6("");
    WorkStation->Set_Comment("");
    WorkStation->Set_MergePromptData("True");
    WorkStation->Set_EmployeeID("");
    WorkStation->Set_UserDef_1("");
    WorkStation->Set_UserDef_2("");
    WorkStation->Set_AuditVersion("6.0.128");
    WorkStation->Set_WorkstationGuid("");

    Mais, il y a une fonction AfterConstruction(), et je ne sais pas à quoi elle correspond (enfin, j'ai a peu près compris). Mais, je n'arrive pas à l'utiliser!!!

    Comment faudrait-il faire???


    Merci


    Julien
    Admin Réseaux & Systèmes.

    Red Hat Certified Technician...#604006101698235

  3. #3
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Points : 1 271
    Points
    1 271
    Par défaut
    Bonjour,

    Peut être que cela te forcerait à revoir ton appli, mais une transformation xslt ne ferait-elle pas mieux l'affaire ?

    Cordialement,

    Arnaud

  4. #4
    Membre averti
    Avatar de Julien.alkaza
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    239
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 239
    Points : 363
    Points
    363
    Par défaut
    Salut,

    Les fichiers que je dois générer seront ensuite importés dans un logiciel qui veut du XML. Le truc, c'est que je ne sais pas comment il les traitent...
    Comme je l'ai dit plus haut, la récupération des infos se fait bien, mais l'écriture buggue!!!!!!!

    En fait, j'arrive à générer les fichiers, mais ils sont vides!!!!
    Je suppose que c'est le "AfterConstruction()" qui ferait fonctionner le tout!!!


    Merci

    Julien
    Admin Réseaux & Systèmes.

    Red Hat Certified Technician...#604006101698235

  5. #5
    Membre averti
    Avatar de Julien.alkaza
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    239
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 239
    Points : 363
    Points
    363
    Par défaut
    Ca y est, j'ai réussi!!!!!
    Donc, en utilisant l'expert de liaison de données XML, on peut utiliser les fonctions qu'il a généré.
    En gros, pour mon cas (récupération de données dans un fichier, puis insertion dans un autre), j'ouvre le premier fichier et le second :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CoInitialize (NULL);
    Doc1->LoadFromFile(OpenDialog1->FileName);
    Doc1->Active = true;
    Doc2->LoadFromFile(Doc2->FileName);
    Doc2->Active = true;
    Ensuite il faut lire les données dans le premier fichier

    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
     
    //Analyse du doc XML
    _di_IXMLDevicesType Devices = GetDevices(Doc1);
     
    nbimp = Devices->Count; //On compte le nombre d'imprimantes
    Label4->Caption = nbimp;
    //Récupération des info de chaque imp, et ajout dans un nouveau fichier
    for (int i=0;i<nbimp;i++)
    {
    _di_IXMLDeviceType Device = Devices->Get_Device(i);//on récupère l'imp n°i
    //On charge les infos.
    model = Device->Get_Model();
    Desc = Device->Get_Desc();
    IPaddr = Device->Get_IPAddr();
    MACaddr = Device->Get_HWAddr();
    serial = Device->Get_SerialNum();
    JDmodel = Device->Get_JDModel();
    JDrev = Device->Get_JDRev();
    FirmVersion = Device->Get_PtrFirmwareVersion();
    FirmRev = Device->Get_PtrFirmwareRev();
    Ram = Device->Get_CAP_INSTALLED_RAM();
    On charge le second :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //Chargement du deuxième fichier (écriture)
    _di_IXMLWorkstationType WorkStation = GetWorkstation(Doc2);
    On insère les infos :
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    //Enregistrement des noeuds.
    AfterConstruction();
    //Renseignement des champs pour workstation
    WorkStation->Set_Number((WideString)nbvar);
    WorkStation->Set_AuditDate(200506040800);
    WorkStation->Set_CompType(0);
    WorkStation->Set_Type("baseline");
    WorkStation->Set_Name("");
    WorkStation->Set_Position("");
    WorkStation->Set_Phone("");
    WorkStation->Set_Fax("");
    WorkStation->Set_FaxExt("");
    WorkStation->Set_PhoneExt("");
    WorkStation->Set_EMail("");
    WorkStation->Set_Dept("");
    WorkStation->Set_DeptNum("");
    WorkStation->Set_Location("");
    WorkStation->Set_Network("IMPRIMANTE");
    WorkStation->Set_UserDef1(Desc);
    WorkStation->Set_UserDef2("");
    WorkStation->Set_UserDef3("");
    WorkStation->Set_UserDef4("");
    WorkStation->Set_UserDef5("");
    WorkStation->Set_UserDef6("");
    WorkStation->Set_Comment("");
    WorkStation->Set_MergePromptData("True");
    WorkStation->Set_EmployeeID("");
    WorkStation->Set_UserDef_1("");
    WorkStation->Set_UserDef_2("");
    WorkStation->Set_AuditVersion("6.0.128");
    WorkStation->Set_WorkstationGuid("");
     
    //on récupère les infos pour le noeud hardware
    _di_IXMLHardwareType HardWare = WorkStation->Get_Hardware();
    AfterConstruction();
    //on récupère les infos pour le noeud computer
    _di_IXMLComputerType Computer = HardWare->Get_Computer();
     
    //Renseignement des champs pour computer
    Computer->Set_Name(serial);
    Computer->Set_Model(model);
    Computer->Set_ServiceTag(IPaddr);
     
    _di_IXMLMemoryType Memory = HardWare->Get_Memory();
     
    Memory->Set_Quantity(Ram+"000000");
     
    _di_IXMLOperatingSystemType OS = HardWare->Get_OperatingSystem();
     
    OS->Set_Version(FirmVersion);
    OS->Set_ServicePack(FirmRev);


    Et ensuite on enregistre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Doc2->SaveToFile(IntToStr(nbvar)+".xml");
    Voilà, les types sont ceux définis dans les fichiers générés par l'expert.

    Ca marche nickel.. Pour plus d'info ==>MP


    Julien[/code]
    Admin Réseaux & Systèmes.

    Red Hat Certified Technician...#604006101698235

  6. #6
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Points : 1 271
    Points
    1 271
    Par défaut
    Citation Envoyé par Julien.alkaza
    Salut,

    Les fichiers que je dois générer seront ensuite importés dans un logiciel qui veut du XML. Le truc, c'est que je ne sais pas comment il les traitent...
    Pour information, le xslt prend un XML en entrée, et produit ce que l'on veut en sortie, dont du XML par exemple, et ce très facilement.

    Mais si tu y es arrivé...

    Arnaud

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

Discussions similaires

  1. [XML] Génération fichier XML pour RSS via PHP, problème lors de l'écriture
    Par gator dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 04/02/2012, 18h17
  2. [Excel] génération d'XML
    Par charliejo dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 16/01/2007, 15h24
  3. génération de xml par flash
    Par Catalan dans le forum Flash
    Réponses: 1
    Dernier message: 12/01/2007, 04h33
  4. [DOM] Génération de XML tout pas beau :(
    Par scorpiwolf dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 23/05/2006, 15h49
  5. [LOMBOZ]Génération WEB.XML
    Par JWillow dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 14/12/2004, 23h54

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