Je souhaite récupérer toutes les valeurs d'un noeud XML. Le souci est que je ne connais pas d'avance le nombre d'enfants qu'il peut y avoir. Voici un exemple d'un XML tel qu'il pourrait exister :
Code xml : 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 <?xml version="1.0" encoding="utf-8"?> <rss version="2.0"> <Test> <model type="Type1"> <cpte>cpte1_1</cpte> </model> <model type="Type2"> <cpte>cpte2_1</cpte> <cpte>cpte2_2</cpte> </model> <model type="Type3"> <cpte>cpte3_1</cpte> <cpte>cpte3_2</cpte> <cpte>cpte3_3</cpte> </model> </Test> </rss>
L'idée est de sélectionner le noeud via un combobox et ensuite récupérer dans une (ou plusieurs) variable(s) les enfants. Voici ce que je fais :
Cette méthode fonctionne à moitié. En effet le combobox est bien alimenté via le model, sur un changement d'index, je récupère "grossièrement" les valeurs des enfants, mais le souci est que c'est un peu le boxon (espace, saut de ligne, ...).
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 import QtQuick 2.4 import QtQuick.XmlListModel 2.0 import QtQuick.Controls 1.3 Rectangle{ height : 150; width : 250 XmlListModel { id: xmlModel source: "feed.xml" query: "/rss/Test/model" XmlRole { name: "type"; query: "@type/string()" } XmlRole { name: "cpte"; query: "string()" } } ComboBox { x : 0 ; y : 10 model : xmlModel textRole : "type" onCurrentIndexChanged: { var cpte = xmlModel.get(currentIndex).cpte.split('\n') console.log(cpte) } } }
Cela nécessite plusieurs traitement afin d'obtenir des valeurs exploitables.
J'aimerai trouver un moyen de faire ça propre. J'ai regardé du coté des syntaxes XPath, mais déjà, tout ce qui commence par "/" est à bannir, le reste que j'ai essayé ne représente pas des query valident.
Si quelqu'un a une idée, qu'il n'hésite pas
En attendant je vais me coltiner quelques fonctions pour traiter le résultat que j'obtiens
@+ et merci par avance.
J
[EDIT]
Voila le code pour traitement :
Rien d'insurmontable, mais si quelque chose de tout fait existe, je suis preneur
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 import QtQuick 2.4 import QtQuick.XmlListModel 2.0 import QtQuick.Controls 1.3 Rectangle{ height : 150; width : 250 function traitement(cpteGet){ var liste = [] for (var i=0 ; i<cpteGet.length ; i++){ if (cpteGet[i] !== ''){ var val = cpteGet[i] var a = 0 while (true){ if (val[a] === ' '){ val = val.replace(' ','') } else { liste.push(val) break }; } } } return liste } XmlListModel { id: xmlModel source: "feed.xml" query: "/rss/Test/model" XmlRole { name: "type"; query: "@type/string()" } XmlRole { name: "cpte"; query: "string()" } } ComboBox { x : 0 ; y : 10 model : xmlModel textRole : "type" onCurrentIndexChanged: { var cpte = xmlModel.get(currentIndex).cpte.split('\n') var cpteModel = traitement(cpte) console.log(cpteModel) } } }![]()
Partager