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 :
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)
       }
 
   }
}
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, ...).
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 :
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)
        }
    }
}
Rien d'insurmontable, mais si quelque chose de tout fait existe, je suis preneur