FAQ Qt
Qt permet de lire facilement un fichier XML avec l'API DOM. DOM permet de naviguer
dans un document XML comme dans un arbre avec toujours une relation parent enfant
entre les nœuds qui composent l'arbre.
QDomDocument permet de gérer les document avec DOM.
Exemple de parcours d'un fichier XML simple.
<?xml version="1.0" encoding="UTF-8"?>
<root>
<site>
<nom>
developpez</nom>
<url>
www.developpez.com</url>
</site>
<contributeur>
<nom
faq
=
"C++"
>
AAA</nom>
</contributeur>
<contributeur>
<nom
faq
=
"Qt"
>
BBB</nom>
</contributeur>
</root>
Parcours du fichier en utilisant l'API DOM
QString
fileName =
"developpez.xml"
;
QFile
file(fileName);
file.open(QFile
::
ReadOnly |
QFile
::
Text);
QDomDocument
doc;
doc.setContent(&
file, false
);
QDomElement
racine =
doc.documentElement();
racine =
racine.firstChildElement();
while
(!
racine.isNull())
{
if
(racine.tagName() ==
"site"
)
{
QDomElement
unElement =
racine.firstChildElement();
while
(!
unElement.isNull())
{
if
(unElement.tagName() ==
"nom"
)
{
QString
strNom =
unElement.text();
}
else
if
(unElement.tagName() ==
"url"
)
{
QString
strURL =
unElement.text();
}
unElement =
unElement.nextSiblingElement();
}
}
if
(racine.tagName() ==
"contributeur"
)
{
QDomElement
elem =
racine.firstChildElement();
QString
strNameContrib =
elem.text();
QString
attFaq =
elem.attribute("faq"
);
}
racine =
racine.nextSiblingElement();
}
Qt fournit la classe QDomDocument,
qui permet de gérer les fichiers XML à la manière de DOM,
c'est-à-dire que le fichier XML est représenté par un arbre dans lequel on peut
se déplacer grâce à une relation de parent-enfant entre les nœuds qui composent l'arbre.
Avec QDomDocument vous pouvez créer un fichier XML
en partant de rien, mais vous pouvez aussi éditer un fichier existant (ajout de nœuds, modification de texte…).
Exemple de création d'un fichier XML à l'aide de l'API DOM de Qt.
<?xml version="1.0" encoding="UTF-8"?>
<root>
<site>
<nom>
developpez</nom>
<url>
www.developpez.com</url>
</site>
<contributeur>
<nom
faq
=
"c++"
>
AAA</nom>
</contributeur>
<contributeur>
<nom
faq
=
"Qt"
>
BBB</nom>
</contributeur>
</root>
QDomDocument
doc;
QDomNode
xmlNode =
doc.createProcessingInstruction("xml"
,"version=
\"
1.0
\"
encoding=
\"
UTF-8
\"
"
);
doc.insertBefore(xmlNode, doc.firstChild());
QDomElement
root =
doc.createElement("root"
);
doc.appendChild(root);
QDomElement
site =
doc.createElement("site"
);
root.appendChild(site);
QDomElement
nom =
doc.createElement("nom"
);
site.appendChild(nom);
QDomText
nomText =
doc.createTextNode("developpez"
);
nom.appendChild(nomText);
QDomElement
url =
doc.createElement("url"
);
site.appendChild(url);
QDomText
urlText =
doc.createTextNode("www.developpez.com"
);
url.appendChild(urlText);
QDomElement
contributeur1 =
doc.createElement("contributeur"
);
QDomElement
nomContrib1 =
doc.createElement("nom"
);
nomContrib1.setAttribute( "faq"
,"C++"
);
root.appendChild(contributeur1);
contributeur1.appendChild(nomContrib1);
QDomText
nameContrib1 =
doc.createTextNode("AAA"
);
nomContrib1.appendChild(nameContrib1);
QDomElement
contributeur2 =
doc.createElement("contributeur"
);
QDomElement
nomContrib2 =
doc.createElement("nom"
);
nomContrib2.setAttribute("faq"
,"Qt"
);
root.appendChild(contributeur2);
contributeur2.appendChild(nomContrib2);
QDomText
nameContrib2 =
doc.createTextNode("BBB"
);
nomContrib2.appendChild(nameContrib2);
QFile
file( "developpez.xml"
);
file.open(QIODevice
::
WriteOnly);
QTextStream
ts(&
file);
int
indent =
2
;
doc.save(ts, indent);
Les sources présentées sur cette page sont libres de droits
et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur.
Copyright © 2006 - 2017 Developpez LLC.
Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne
peut être faite de ce site ni de l'ensemble de son contenu : textes, documents
et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez
selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.