Etant donné que je souhaite uniquement afficher les parents d'un dom document, comment pourrais je faire pour filtrer le fichier xml qui le charge dans QTreeView?
Version imprimable
Etant donné que je souhaite uniquement afficher les parents d'un dom document, comment pourrais je faire pour filtrer le fichier xml qui le charge dans QTreeView?
tu entends quoi par les parents?
Du genre:
Tu veux garder quoi sur cet exemple?Code:
1
2
3
4
5
6
7
8
9 <node> <sousNode1> <sousNode2> <sousSousNode2> </sousSousNode2> </sousNode2> </sousNode1> <node>
Deuxième question:
tu utilise quelle méthode pour le XML? DOM ou QXmlStreamReader?
Tu récupère les elements "element" de ton XML.Code:
1
2
3
4
5
6
7
8
9
10 QDomElement root = doc.documentElement(); QDomNode e = root.firstChild(); while(!e.isNull()) { QDomElement element= e.toElement(); e = e.nextSibling(); }
Pour chaque niveau tu rajoute un firstChild() et tu descends dans l'arborescence.
Ceci est valable pour mon code ci dessus?Et comment pourrais je le modifier?Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 model = new DomModel(QDomDocument(), this); view = new QTreeView(this); QFile file(":/default.xml"); if (file.open(QIODevice::ReadOnly )) { QDomDocument document; if (document.setContent(&file)) { DomModel *newModel = new DomModel(document, this); view->setModel(newModel); // set context menu policy view->setContextMenuPolicy(Qt::CustomContextMenu); connect(view, SIGNAL(customContextMenuRequested(const QPoint&)),this, SLOT(ShowTreeContextMenu(const QPoint&))); } file.close(); ui.horizontalLayout_2->addWidget(view); setLayout(ui.horizontalLayout_2); }
Juste après
"if (document.setContent(&file))"
Tu rajoutes:
Code:
1
2
3
4
5
6
7
8
9
10
11
12 file->close(); //tu n'a plus besoin du fichier en DOM QDomElement root = doc.documentElement(); QDomNode e = root.firstChild(); while(!e.isNull()) { QDomElement element = e.toElement(); //tu rajoutes comme tu veux les element au modele, genre // tu récupère le tagName() que tu mets dans la QtreeView. e = e.nextSibling(); }