
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és sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une œuvre intellectuelle protégée par les droits d'auteurs.
Copyright ©2006 - 2017
Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et 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.