Page 1 sur 2

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

Publié : lun. 20/mars/2023 18:22
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 !

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

Publié : lun. 20/mars/2023 18:30
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.

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

Publié : lun. 20/mars/2023 21:18
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:

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

Publié : lun. 20/mars/2023 21:26
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

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

Publié : lun. 20/mars/2023 23:58
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...

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

Publié : mar. 21/mars/2023 0:03
par falsam
XML sera bien plus compliqué. A toi de voir. Mon aide s'arrête là :wink:

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

Publié : mar. 21/mars/2023 12:23
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 ;)

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

Publié : mar. 21/mars/2023 15:47
par Shadow
Justement j'y arrive pas !

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

Publié : mar. 21/mars/2023 16:07
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:

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

Publié : mar. 21/mars/2023 17:30
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")

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

Publié : mar. 21/mars/2023 17:32
par Shadow
Ok, c'est parce que ya des espace dans les nom c'est pour ça.

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

Publié : mar. 21/mars/2023 17:38
par Mindphazer
T'as pas suivi l'exemple de Blendman qui, lui, fonctionne.

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

Publié : mar. 21/mars/2023 18:52
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")

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

Publié : mar. 21/mars/2023 23:12
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.

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

Publié : mar. 21/mars/2023 23:29
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 :?