Raket drivmedel karakterisering, C++ Excel Automation, Boost egendom träd och TC Logger (7 / 8 steg)
Steg 7: Läser XML med boost::property_tree...
Det finns många bibliotek som kan användas för att läsa XML-filer. De flesta av dem är tunga och komplexa. Boost property_tree emellertid är mycket lätt att använda och består av ett header-fil bara genomförande.
Datafilerna TC Logger är i en XML-(eller XML-liknande) format. (Se exempel på filer som ingår med koden i github som bilden bifogas detta steg.)
Om du vill använda boost::property_tree för att läsa XML startar filer genom att inkludera följande header-filer:
#include < iostream >
#include "boost/property_tree/xml_parser.hpp"
#include "boost/property_tree/ptree.hpp"
För att öppna en XML-fil och läsa data, behövs bara några fler rader som visas i följande kod från ExcelAutomation.cpp:
Boost::property_tree::ptree träd.
std::filebuf fil.
om (== falskt file.open(wstrFile.c_str(), std::ios::in))
{
fortsätta;
}
std::IStream inputStream(&file);
Boost::property_tree::xml_parser::read_xml(inputStream, Tree);
Det är lätt! Nu att läsa poster från property_tree är lika lätt. I följande exempel kommer att läsa ett dubbelt värde:
Double dExitDiameter = tree.get ("Document.MotorData.ExitDiameter", 0.0f);
Om posten inte hittades, returneras standardvärdet för 0,0. I vårt fall läses ExitDiameter från filen MTD1 som ser ut så här:
< MotorData >
< drivmedel > ASBLUE4_18 < / drivmedel >
< CaseDiameter > 54 mm < / CaseDiameter >
< NozzleThroatDiameter > 0.28125 < / NozzleThroatDiameter >
< ExitDiameter > 0.28125 < / ExitDiameter >
< korn > 1 < / korn >
Strängar kan läsas från XML-filen med koden så här:
CONST std::string strGrains (tree.get ("Document.MotorData.Grains", "0"));
CONST std::string strCaseDiameter (tree.get ("Document.MotorData.CaseDiameter", "0 mm"));
CONST std::string strNozzleThroat (tree.get ("Document.MotorData.NozzleThroatDiameter", "0"));
Observera att boost dokumentationen ger Detaljer om hur du använder property_tree. Om exempelvis standardvärden inte tillhandahålls ett undantag kommer att kastas om posten inte finns.
För fler exempel, se resten av ExcelAutomation.cpp i den TCLogger2Excel koden tarvlig, eller besök boost dokumentation sida.