FAQ Qt
Qt fournit, depuis sa version 4.3, la classe
QXmlStreamReader qui permet de lire
rapidement des fichiers XML un peu à la manière de SAX mais en non événementiel.
Comme SAX, on parcourt l'arbre XML et l'on ne peut le remonter pendant son parcours.
QXmlStreamReader repose sur le principe
d'une boucle dans laquelle on va parcourir le fichier à l'aide de la méthode
readNext() et vérifier sur quel type de token
on est positionné.
Exemple avec le fichier XML
Sélectionnez
<developpez>
<contributeur>
Superjaja</contributeur>
</developpez>
Si l'on parcourt le fichier avec la méthode readNext(),
les différents types de jeton renvoyés sont :
- StartDocument ;
- StartElement (name() == "developpez") ;
- StartElement (name() == "contributeur") ;
- Characters (text() == "Superjaja") ;
- EndElement (name() == "contributeur") ;
- EndElement (name() == "developpez") ;
- EndDocument.
Pour connaître tous les types de tokens possibles, se référer
à la documentation de Qt.
Voici un exemple un peu plus complexe
<?xml version="1.0" encoding="UTF-8"?>
<root>
<site>
<nom>
developpez</nom>
<url>
www.developpez.com</url>
</site>
<contributeur>
<nom
faq
=
"c++"
>
Alp</nom>
</contributeur>
<contributeur>
<nom
faq
=
"Qt"
>
Yan</nom>
</contributeur>
</root>
Parcours de ce fichier avec QXmlStreamReader
QXmlStreamReader
reader;
QString
fileName =
"developpez.xml"
;
QFile
file(fileName);
file.open(QFile
::
ReadOnly |
QFile
::
Text);
reader.setDevice(&
file);
reader.readNext();
while
(!
reader.atEnd())
{
if
(reader.isStartElement())
{
if
(reader.name() ==
"root"
)
{
reader.readNext();
while
(reader.isStartElement()==
false
)
reader.readNext();
if
(reader.name() ==
"site"
)
{
reader.readNext();
while
(reader.isStartElement()==
false
)
reader.readNext();
if
(reader.name() ==
"nom"
)
{
QString
strNom =
reader.readElementText();
reader.readNext();
while
(reader.isStartElement()==
false
)
reader.readNext();
}
if
(reader.name() ==
"url"
)
{
QString
strUrl =
reader.readElementText();
}
}
}
if
(reader.name() ==
"contributeur"
)
{
reader.readNext();
while
(reader.isStartElement()==
false
)
reader.readNext();
if
(reader.name() ==
"nom"
)
{
QString
attrFAQ =
reader.attributes().value("faq"
).toString();
QString
strNameContrib =
reader.readElementText();
}
}
}
reader.readNext();
}
file.close();
Qt, depuis sa version 4.3, fournit la classe
QXmlStreamWriter pour écrire des fichiers XML.
Celle-ci est relativement simple et fonctionne sur le même principe que
QXmlStreamReader pour la lecture.
On souhaite écrire le fichier XML suivant :
<?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>
Réalisation avec QXmlStreamWriter
QString
fileName =
"developpez.xml"
;
QFile
file(fileName);
file.open(QFile
::
WriteOnly |
QFile
::
Text);
QXmlStreamWriter
writer(&
file);
writer.setAutoFormatting(true
);
writer.writeStartDocument();
writer.writeStartElement("root"
);
writer.writeStartElement("site"
);
writer.writeTextElement("nom"
, "developpez"
);
writer.writeTextElement("url"
, "www.developpez.com"
);
writer.writeEndElement();
writer.writeStartElement("contributeur"
);
writer.writeStartElement("nom"
);
writer.writeAttribute("faq"
, "c++"
);
writer.writeCharacters("AAA"
);
writer.writeEndElement();
writer.writeEndElement();
writer.writeStartElement("contributeur"
);
writer.writeStartElement("nom"
);
writer.writeAttribute("faq"
, "Qt"
);
writer.writeCharacters("BBB"
);
writer.writeEndElement();
writer.writeEndElement();
writer.writeEndDocument();
file.close();
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.