XML - ordre des attributs

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Bmld76
Messages : 116
Inscription : dim. 09/janv./2022 12:47

XML - ordre des attributs

Message par Bmld76 »

Bonsoir,

Je travaille sur des fichiers XML. Lors de la lecture d'un fichier XML est-il possible d'avoir des informations sur l'ensemble des attributs d'un noeud. Genre nombre, ordre.

La raison est que pour enregistrer les attributs d'un noeud , je détecte le dernier attribut pour déclencher l'enregistrement dans une base. Ca fonctionne mais la fédération sportive qui produit le fichier vient de changer l'ordre de attributs et donc ca ne fonctionne plus.

Je cherche a lire un XML en me démarquent de l'ordre des noeud et des attributs. Je pense que c'est comme cela que l'on doit procédé. (je découvre la gestion des Xml)

Je pourrais faire un programme test mais pas ce soir.

Merci


Bien cordialement
_____________________________________________________________
IMAC 21.5 2012 Core I5 - 2.70 Ghz. 16 GB NVIDIA GeForce GT 640M 512 Mo. MacOs OCPL Sonoma 14.3
MacBook Air M1 - 8Go - Sonoma 14.5

PureBasic 6.11 MacOS
Bmld76
Messages : 116
Inscription : dim. 09/janv./2022 12:47

Re: XML - ordre des attributs

Message par Bmld76 »

Bonjour,

J'ai fais un programme test pour traiter les données XML ce qui m'a conduit vers une solution.

Lors de la lecture des attributs il faut mettre l"enregistrement de ces attributs, chargé dans une variable structurée temporaire, à la fin de la scrutation et nom de détecté le dernier attribut.

J'insère tout de même mon programme de test si ca peu aider

Cordialement

Code : Tout sélectionner

 
 #Window     = 0
#TreeGadget = 0
#XML        = 0
  

Structure TireurStruc
  nom.s
  prenom.s
  sexe.s
  club.s
EndStructure

Structure ArbitreStruc
  nom.s
  prenom.s
  sexs.s
  club.s
EndStructure

Dim TabTireur.TireurStruc(10)
Dim TabArbitre.TireurStruc(10)

Procedure FillTree(*CurrentNode, CurrentSublevel)
  If XMLNodeType(*CurrentNode) = #PB_XML_Normal
    
    Text$ = GetXMLNodeName(*CurrentNode) + ": "
    
    If ExamineXMLAttributes(*CurrentNode)
      While NextXMLAttribute(*CurrentNode)
        Text$ + " Attribute:" + XMLAttributeName(*CurrentNode) + "=" + Chr(34) + XMLAttributeValue(*CurrentNode) + Chr(34) + " "
        Debug " 2"+Text$  
      Wend
    EndIf  
    
    Text$+ " " + GetXMLNodeText(*CurrentNode)
    Debug " 1"+ Text$  
    Debug "enregistre ici "
    
    AddGadgetItem(#TreeGadget, -1, Text$, 0, CurrentSublevel)
    
    *ChildNode = ChildXMLNode(*CurrentNode)
    While *ChildNode <> 0
      FillTree(*ChildNode, CurrentSublevel + 1)
      *ChildNode = NextXMLNode(*ChildNode)
    Wend
  EndIf
EndProcedure 


XML$ =  "<BaseCompetitionIndividuelle>"+
        "<Tireurs>" +
        "<Tireur Sexe='M' ID='11890' Points='245,26' Classement='1445' Club='La Rapière Hérouville' Licence='011889' Lateralite='D' Nation='FRA' DateNaissance='08.07.1976' Prenom='Hermann' Nom='CHALUME'/>" +
        "<Tireur Sexe='M' ID='14665' Points='' Classement='' Club='Rouen' Licence='014664' Lateralite='D' Nation='FRA' DateNaissance='22.05.1988' Prenom='Florian' Nom='CRASPIN'/>" +      
        "</Tireurs>" +
        "<Arbitres>" +
        "<Arbitre Categorie='' Sexe='M' ID='45479' Club='DIEPPE' Licence='045478' Nation='FRA' DateNaissance='12.05.1995' Prenom='Nicolas' Nom='PELLETTE' Ligue='NORMANDIE'/>" +
        "<Arbitre Categorie='' Sexe='M' ID='23128' Club='Nancy' Licence='023127' Nation='FRA' DateNaissance='29.10.1996' Prenom='Nathan' Nom='FROGY' Ligue='NORMANDIE'/>" +
        "</Arbitres>" +
        "</BaseCompetitionIndividuelle>"

  If ParseXML(#Xml, XML$) ; And XMLStatus(#Xml) = #PB_XML_Success

    If XMLStatus(#XML) <> #PB_XML_Success
      Message$ = "Error in the XML file:" + Chr(13)
      Message$ + "Message: " + XMLError(#XML) + Chr(13)
      Message$ + "Line: " + Str(XMLErrorLine(#XML)) + "   Character: " + Str(XMLErrorPosition(#XML))
      MessageRequester("Error", Message$)
    EndIf

    If OpenWindow(#Window, 0, 0, 500, 500, "XML Example", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
      TreeGadget(#TreeGadget, 10, 10, 480, 480)
      
      ; Get the main XML node, and call the FillTree() procedure with it
      ;
      *MainNode = MainXMLNode(#XML)
      If *MainNode
        FillTree(*MainNode, 0)
      EndIf
      For i = 0 To CountGadgetItems(#TreeGadget) - 1
        SetGadgetItemState(#TreeGadget, i, #PB_Tree_Expanded)
      Next i
      Repeat
        Event = WaitWindowEvent()
      Until Event = #PB_Event_CloseWindow
    EndIf
        
  Else
    MessageRequester("Error", "The file cannot be opened.")
  EndIf

_____________________________________________________________
IMAC 21.5 2012 Core I5 - 2.70 Ghz. 16 GB NVIDIA GeForce GT 640M 512 Mo. MacOs OCPL Sonoma 14.3
MacBook Air M1 - 8Go - Sonoma 14.5

PureBasic 6.11 MacOS
Répondre