lecture d’un fichier XML dans un programme C ++

J’essaie de lire un fichier XML dans mon programme C ++. Le fichier XML ressemble à ceci:

     300   500     

Pour le moment, je peux regarder le fichier XML et essayer de le lire comme ceci:

 ifstream in("mydata.xml"); //ignore the <?xml line in.ignore(200, '\n'); //i know that the first value i want is the window height so i can ignore   and  //ignore  in.ignore(200, '\n'); //ignore  in.ignore(200, '\n'); //ignore  in.ignore(200, '\n'); ssortingng s; int height; //okay, now i have my height in >> s >> height; 

En général, cela semble être une mauvaise idée et cela limite vraiment la façon dont le fichier XML peut être modifié. La solution ci-dessus est très manuelle et si quelque chose dans XML change, il semble que la méthode de lecture entière devrait être changée.

Y a-t-il une meilleure manière de faire cela?

Vous pouvez utiliser une bibliothèque qui le fera pour vous. Si vous travaillez sur la plate-forme Windows, vous pouvez utiliser MSXML, qui fait déjà partie du système.

Cochez cette question: Read Write XML File In C ++

Autres bibliothèques populaires: xerces , tinyxml , rapidxml

boost property tree fonctionne très bien avec xml, je l’utiliserais bien.

Vous aurez besoin d’un parsingur XML. Il y a un tas là-bas:

  • TinyXML
  • pugiXML
  • POCO est livré avec un parsingur XML (et bien d’autres encore)
  • QtXml seulement quand vous utilisez déjà Qt

Mon préféré est pugiXML, mais c’est une question de préférence personnelle.

Vous pouvez utiliser la bibliothèque POCO qui a des fonctions pour parsingr XML

Dans les sources multi-plateformes, j’utilise généralement le lecteur Qt XML.

Vous avez 3 façons de lire:

  1. Qt core QXmlStreamReader – Méthode Qt de lecture XML
  2. Lecteur SAX2 – Lecteur SAX2 standard avec classe de traitement de contenu
  3. Lecteur DOM – Lecteur de documents DOM avec nœuds XML

Si vous écrivez uniquement un logiciel Windows, vous devez utiliser MSXML 6. Étant donné que Windows XP SP3, MSXML 6.0 fait partie du système d’exploitation.

Sous Linux, vous devez utiliser libxml2 .