Bonjour,
J'ai fait une fonction qui parcours un xml pour récupérer des attributs et leurs valeurs et je souhaite trouver le moyen d'automatiser la descente dans les fils et la boucle que j'effectue.
Ma procédure est générique pour une arborescence comme ceci :
et ce quel que soit le nom des balises et des attributs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <DOCUMENT> <INVENTORYS> <INVENTORY attr1="ValA" attrx="valZ" /> <INVENTORY attrN="valN" /> </INVENTORYS> </DOCUMENT>
Le problème survient avec ceci :
Je ne vois pas comment adapter ma procédure pour gérer des format de XML divers..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <DOCUMENT> <INVENTORYS> <INVENTORY> <INVN_STYLE attr1="val1" attr2="val2" /> <INVN_SBS attr1="valx" attr2="val2" /> </INVENTORY> </INVENTORYS> </DOCUMENT>
ps : mon code :
J'ai pensé essayer de trouver un moyen d'atteindre le plus bas niveau pour récupérer les attributs, mais comment savoir de combien remonter après.
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69 MonDoc est une chaîne = fChargeTexte("Fichiers de test/Inventory.xml") XMLDocument("DocXML", MonDoc) tabNomBalise est un tableau de chaînes XMLPremier("DocXML") XMLFils("DocXML") XMLFils("DocXML") XMLFils("DocXML") TANTQUE XMLEnDehors("DocXML") = Faux i++ XMLSuivant("DocXML") FIN XMLParent("DocXML") XMLParent("DocXML") XMLParent("DocXML") XMLPremier("DocXML") // Document XMLFils("DocXML") sBaliseSup = XMLNomElément("DocXML") // ex DCSS XMLFils("DocXML") TANTQUE XMLEnDehors("DocXML") = Faux sBaliseTable = XMLNomElément("DocXML") // ex DCS XMLFils("DocXML") POUR j = 1 _A_ i-1 // Récupère le nom de l'élément en cours tabTabval[j][1] = XMLNomElément("DocXML") // Récupère la valeur de l'élément tabTabval[j][2] = XMLLit("DocXML", sBaliseSup + "/" + sBaliseTable + "[" + nCpt + "]" +"/@" + tabTabval[j][1]) XMLSuivant("DocXML") FIN /// Ajout POUR nV = 1 _A_ (i-1) {sBaliseTable + "." + tabTabval[nV][1],indRubrique} = tabTabval[nV][2] FIN bRestest = HAjoute(sBaliseTable) SI bRestest = 0 ALORS // erreur Trace(HErreur()) FIN // Suite XMLParent("DocXML") //trace(XMLNomElément("DocXML")) nCpt++ XMLSuivant("DocXML") FIN
Je pense que ce sera difficile à automatiser...
Existe t-il une fonction qui permet de savoir si on a atteint le nœud le plus bas ??
Partager