Comment créer un fichier XML avec purebasic et ajouter des parents et des enfants ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Comment créer un fichier XML avec purebasic et ajouter des parents et des enfants ?

Message par Shadow »

Salut,

J'ai essayer de toucher un peu au XML avec purebasic mais j'y arrive pas même avec les exemples fournie.

Comment créer un fichier xml avec les fonctions de purebasic avec
3 parents ayant chacun 4 enfants qui ont eux même 3 enfants qui ont eu même 2 enfant ayant eux même 1 enfant ?

J'ai pas pus trouver d'exemple en cherchant car la recherche ignore le mot XML :?
Pas trouver non plus sur internet !
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Comment créer un fichier XML avec purebasic et ajouter des parents et des enfants ?

Message par falsam »

C'est de l'XML récursif. SI tu ne sais déja pas faire un fichier XML alors abandonne tout de suite.

Pense à une solution JSON récursif c'est plus facile.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Comment créer un fichier XML avec purebasic et ajouter des parents et des enfants ?

Message par falsam »

Un peu d'aide pour te mettre sur la voie.

■ Exemple d'une structure récursive
Cette structure contiendra un parent et une liste qui pointe vers cette structure. (Oui c'est possible)

Code : Tout sélectionner

; Structure récursive
Structure NewParent
  Parent.s
  
; La liste pointe vers sa structure 
  List Parents.NewParent() 
EndStructure
C'est prêt. Tu crées ta liste de parents.

Code : Tout sélectionner

Global NewList Parents.NewParent()
Ca cogite ? respire un peu :mrgreen:

■ Et maintenant le code.
- Ajouter un parent. Procedure AddParent(Parent.s, *parent.NewParent=0)
- Listage récursif de la hiérarchie. Showhierachy(List Parents.NewParent())

Code : Tout sélectionner

; Structure récursive
Structure NewParent
  Parent.s
  ; La liste pointe aussi vers la structure 
  List Parents.NewParent() 
EndStructure
Global NewList Parents.NewParent()

Procedure AddParent(Parent.s, *parent.NewParent=0)
  Protected Result
  
  ; Attache le nouveau membre à un parent existant
  If *parent
    Result = AddElement(*parent\Parents())
    
    With *parent\Parents()
      \Parent = Parent
    EndWith 
  Else
    ; C'est le rang zero de la hiérachie
    Result = AddElement(Parents())
    Parents()\Parent = Parent
  EndIf   
  ProcedureReturn Result
EndProcedure

;Lister la hiérarchie
Procedure Showhierachy(List Parents.NewParent())
  Static pre.s
  Static Rank = 1
  
  ForEach Parents()    
    Debug RSet(">", Rank, "=") + " Rang " + Str(Rank) + " "  + Parents()\Parent
    
    ; Lecture récursive
    ForEach Parents()\Parents()
      rank + 1
      Showhierachy(Parents()\Parents())
    Next
  Next
  rank -1
EndProcedure

;// Test Zone

; Trois parents A B et C (Rang 1)
A = AddParent("A")
B = AddParent("B")
C = AddParent("C")
 
; A a un enfant A-A (Rang 2)
If A
  AA = AddParent("AA", A)
EndIf 

; AA a trois enfants AAA, AAB et AAC (Rang 3)
If AA
  AAA = AddParent("AAA", AA)
  AAB = AddParent("AAB", AA)
  AAC = AddParent("AAC", AA)
EndIf    

; AAA a un enfant AAAA (Rang 4)
If AAA
  AAAA = AddParent("AAAA", AAA)
EndIf 

; AAB a deux enfants AABA et AABC (Rang 4)
If AAB
  AABA = AddParent("AAB", AAB)
  AABB = AddParent("AABB", AAB)      
EndIf 

; Visualisation du résultat
Showhierachy(Parents())
A toi de voir le résultat. Tu as tout ce qu'il faut pour réaliser ton projet 👍

Enjoy :wink:
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Comment créer un fichier XML avec purebasic et ajouter des parents et des enfants ?

Message par falsam »

J'ai oublié de dire dans mon message précédent que la sauvegarde d'une liste récursive au format JSON est d'une simplicité ̶b̶i̶b̶l̶i̶q̶u̶e̶ PureBasique. 😉🤩

:arrow: https://www.purebasic.com/documentation ... ejson.html
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Comment créer un fichier XML avec purebasic et ajouter des parents et des enfants ?

Message par Shadow »

Merci beaucoup pour ce bel exemple, j'ai perdus quelque cheveux en lisant ce truc :lol:

La récursivité c'est pas facile mais c'est très puissant, c'est comme si le code se répliquais à un
endroit donné, j'ai déjà eu recourt a une procédure récursive dans un de mes projet d'ailleurs mais pas de liste.

Mais je n'est pas compris pourquoi j'ai eu droit a ce si beau code de ta par alors que je voulais juste du XML à la base ^^
C'est pas grave, c'est pas vitale, c'est chaud en plus, pour le JSon déjà c'était pas facile mais là c'est pire je crois.

Ton dernier message me laisse songeur, je ne saurais le faire je pense...
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Comment créer un fichier XML avec purebasic et ajouter des parents et des enfants ?

Message par falsam »

XML sera bien plus compliqué. A toi de voir. Mon aide s'arrête là :wink:
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Comment créer un fichier XML avec purebasic et ajouter des parents et des enfants ?

Message par blendman »

salut

pour le xml, faut dejà regarder dans l'aide la rubrique xml, il y a des fonctions qui peuvent t'aider à comprendre un peu.

Par exemple ça :

Code : Tout sélectionner

; Création d'un arbre xml 
  xml = CreateXML(#PB_Any) 
  mainNode = CreateXMLNode(RootXMLNode(xml), "Zoo") 
  SetXMLNodeName(mainNode, "Zoo") 
  
  ; Création du premier noeud 
  item = CreateXMLNode(mainNode, "Animal") 
  SetXMLNodeName(item, "Animal") 
  SetXMLAttribute(item, "id", "1") 
  SetXMLNodeText(item, "Elephant") 
  
  ; Création du second noeud
  item = CreateXMLNode(mainNode, "Animal") 
  SetXMLNodeName(item, "Animal") 
  SetXMLAttribute(item, "id", "2") 
  SetXMLNodeText(item, "Tigre") 
  
  ; Enregistre l'arbre XML dans le fichier spécifié. 
  SaveXML(xml, "demo.xml")

Là, ça te crée un simple fichier xml.
Vu que tu as une liste avec les parents et les enfants, essaie déjà de sauvegarder avec juste les parents, puis tu ajoutes le reste une fois que tu as ta base ;)
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Comment créer un fichier XML avec purebasic et ajouter des parents et des enfants ?

Message par Shadow »

Justement j'y arrive pas !
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
Mindphazer
Messages : 693
Inscription : mer. 24/août/2005 10:42

Re: Comment créer un fichier XML avec purebasic et ajouter des parents et des enfants ?

Message par Mindphazer »

Shadow a écrit : mar. 21/mars/2023 15:47 Justement j'y arrive pas !
Pourtant, c'est à la portée du premier venu : tu copies-colles le code de Blendman dans l'IDE PureBasic, et ensuite t'appuies sur F5
Facile :mrgreen:
Bureau : Win10 64bits
Maison : Macbook Pro M3 16" SSD 512 Go / Ram 24 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Comment créer un fichier XML avec purebasic et ajouter des parents et des enfants ?

Message par Shadow »

Mindphazer a écrit : mar. 21/mars/2023 16:07
Shadow a écrit : mar. 21/mars/2023 15:47 Justement j'y arrive pas !
Pourtant, c'est à la portée du premier venu : tu copies-colles le code de Blendman dans l'IDE PureBasic, et ensuite t'appuies sur F5
Facile :mrgreen:
Très constructif comme réponse, sert à rien, inutile :roll:

Sinon j'ai essayer ça, J'ai été aider de Chat GPT puis j'ai modifié a ma sauce, mais ça ne fonctionne pas:

Code : Tout sélectionner

Xml.i = CreateXML(#PB_Any)
Famille.i = CreateXMLNode(RootXMLNode(Xml.i), "Famille")

; Parent 1
Parent1.i = CreateXMLNode(Famille.i, "Parent 1")

  ; Enfant 1
  Enfant1.i = CreateXMLNode(Parent1.i, "Enfant 1")
  
    PetitEnfant1.i = CreateXMLNode(Enfant1.i, "Petit-Enfant 1")
      ArrierePetitEnfant1.i = CreateXMLNode(PetitEnfant1.i, "Arrière-Petit-Enfant")
        CreateXMLNode(ArrierePetitEnfant1.i, "Arrière-arrière-Petit-Enfant")
  
      ArrierePetitEnfant2.i = CreateXMLNode(PetitEnfant1.i, "Arrière-Petit-Enfant")
        CreateXMLNode(ArrierePetitEnfant2.i, "Arrière-arrière-Petit-Enfant")
  
    PetitEnfant2.i = CreateXMLNode(Enfant1.i, "Petit-Enfant 2")
      ArrierePetitEnfant1.i = CreateXMLNode(PetitEnfant2.i, "Arrière-Petit-Enfant")
        CreateXMLNode(ArrierePetitEnfant1.i, "Arrière-arrière-Petit-Enfant")
  
      ArrierePetitEnfant3.i = CreateXMLNode(PetitEnfant2.i, "Arrière-Petit-Enfant")
        CreateXMLNode(ArrierePetitEnfant3.i, "Arrière-arrière-Petit-Enfant")
  
; Enregistre l'arbre XML dans le fichier spécifié.
SaveXML(Xml.i, "Démo Xml.xml")
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Comment créer un fichier XML avec purebasic et ajouter des parents et des enfants ?

Message par Shadow »

Ok, c'est parce que ya des espace dans les nom c'est pour ça.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
Mindphazer
Messages : 693
Inscription : mer. 24/août/2005 10:42

Re: Comment créer un fichier XML avec purebasic et ajouter des parents et des enfants ?

Message par Mindphazer »

T'as pas suivi l'exemple de Blendman qui, lui, fonctionne.
Bureau : Win10 64bits
Maison : Macbook Pro M3 16" SSD 512 Go / Ram 24 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Comment créer un fichier XML avec purebasic et ajouter des parents et des enfants ?

Message par Shadow »

Voici un exemple créer avec ChatGPT après discutions et correction:

Code : Tout sélectionner

Xml.i = CreateXML(#PB_Any)
Famille.i = CreateXMLNode(RootXMLNode(Xml.i), "Famille")

; Parents
Parents.i = CreateXMLNode(Famille.i, "Parents")

; Jean
Jean.i = CreateXMLNode(Parents.i, "Jean")
SetXMLAttribute(Jean.i, "Sexe", "Homme")
SetXMLAttribute(Jean.i, "Poids", "85")
SetXMLAttribute(Jean.i, "Taille", "170")
SetXMLAttribute(Jean.i, "Age", "75")

; Enfants de Jean
EnfantsJean.i = CreateXMLNode(Jean.i, "Enfants")

; Luc
Luc.i = CreateXMLNode(EnfantsJean.i, "Luc")
SetXMLAttribute(Luc.i, "Sexe", "Homme")
SetXMLAttribute(Luc.i, "Poids", "65")
SetXMLAttribute(Luc.i, "Taille", "160")
SetXMLAttribute(Luc.i, "Age", "52")

; Enfants de Luc
EnfantsLuc.i = CreateXMLNode(Luc.i, "Enfants")

; Cécile
Cecile.i = CreateXMLNode(EnfantsLuc.i, "Cécile")
SetXMLAttribute(Cecile.i, "Sexe", "Femme")
SetXMLAttribute(Cecile.i, "Poids", "60")
SetXMLAttribute(Cecile.i, "Taille", "148")
SetXMLAttribute(Cecile.i, "Age", "31")

; Enfants de Cécile
EnfantsCecile.i = CreateXMLNode(Cecile.i, "Enfants")

; Tomas
Tomas.i = CreateXMLNode(EnfantsCecile.i, "Tomas")
SetXMLAttribute(Tomas.i, "Sexe", "Homme")
SetXMLAttribute(Tomas.i, "Poids", "30")
SetXMLAttribute(Tomas.i, "Taille", "120")
SetXMLAttribute(Tomas.i, "Age", "12")

; Enfants de Luc
EnfantsMarc.i = CreateXMLNode(Luc.i, "Enfants")

; Marc
Marc.i = CreateXMLNode(EnfantsJean.i, "Marc")
SetXMLAttribute(Marc.i, "Sexe", "Homme")
SetXMLAttribute(Marc.i, "Poids", "73")
SetXMLAttribute(Marc.i, "Taille", "175")
SetXMLAttribute(Marc.i, "Age", "50")

; Enfants de Marc
EnfantsMarc.i = CreateXMLNode(Marc.i, "Enfants")

; Marie
Marie.i = CreateXMLNode(EnfantsJean.i, "Marie")
SetXMLAttribute(Marie.i, "Sexe", "Femme")
SetXMLAttribute(Marie.i, "Poids", "62")
SetXMLAttribute(Marie.i, "Taille", "150")
SetXMLAttribute(Marie.i, "Age", "33")

; Enfants de Marie
EnfantsMarie.i = CreateXMLNode(Marie.i, "Enfants")

; Enregistre l'arbre XML dans le fichier spécifié.
SaveXML(Xml.i, "Démo Xml.xml")
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
boddhi
Messages : 604
Inscription : lun. 26/avr./2010 16:14
Localisation : S 48° 52' 31'' / O 123° 23' 33''

Re: Comment créer un fichier XML avec purebasic et ajouter des parents et des enfants ?

Message par boddhi »

Je ne sais si ton code et ton fichier XML sont la finalité que tu souhaites pour ton développement ou si ce ne sont juste qu'un exemple,

Mais à ta place, je n'utiliserais pas les prénoms comme noms de noeud.
Tout comme les autres données des individus, pourquoi ne pas utiliser un attribut ("Prénom" par exemple) pour stocker cette information ou, autre possibilité, la stocker comme valeur textuelle du noeud ?

De plus, si on analyse le résultat de ton arbre XML, il y a des noeuds inutiles.

Doone un peu plus de détails sur ce que doit contenir ton arborescence XML pour que l'on puisse t'aider.
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Comment créer un fichier XML avec purebasic et ajouter des parents et des enfants ?

Message par Shadow »

boddhi a écrit : mar. 21/mars/2023 23:12 Je ne sais si ton code et ton fichier XML sont la finalité que tu souhaites pour ton développement ou si ce ne sont juste qu'un exemple,

Mais à ta place, je n'utiliserais pas les prénoms comme noms de noeud.
Tout comme les autres données des individus, pourquoi ne pas utiliser un attribut ("Prénom" par exemple) pour stocker cette information ou, autre possibilité, la stocker comme valeur textuelle du noeud ?

De plus, si on analyse le résultat de ton arbre XML, il y a des noeuds inutiles.

Doone un peu plus de détails sur ce que doit contenir ton arborescence XML pour que l'on puisse t'aider.
C'est un exemple.
Oui utiliser un attribut ("Prénom" par exemple) ici est une bonne idée exactement.
il y a des noeuds inutiles ?

Utilité, apprendre, mais sérieux à quoi sa sert ce truc, c'est dur et jvois pas l'intérêt.

Je cherche a faire un fichier d'aide avec des fichier txt ou chaque fichier a pour nom le nom de la fonction et à l'intérieur est une aide pour la fonction.
On m'as conseillé le xml...

Générer un ficher d'aide a partir de fichier txt, sauf que, la mise ne page n'est jamais respecter autre que dans ces fichier txt :?
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Répondre