#include #include #include #include #include "gameinfo.h" using namespace std; #ifdef LIBXML_READER_ENABLED class GameInfo { public: GameInfo(const char *fileName); ~GameInfo(); private: static void processNode(xmlTextReaderPtr reader); static void streamFile(const char *fileName); }; GameInfo::GameInfo(const char *fileName) { streamFile(fileName); } GameInfo::~GameInfo() { xmlCleanupParser(); xmlMemoryDump(); } static void streamFile(const char *fileName) { xmlTextReaderPtr reader; int ret; reader = xmlReaderForFile(fileName, NULL, 0); if(reader != NULL) { ret = xmlTextReaderRead(reader); while(ret == 1) { processNode(reader); ret = xmlTextReaderRead(reader); } xmlFreeTextReader(reader); if (ret != 0) { cout << fileName << " : failed to parse\n"; } } else { cout << "Unable to open file: " << fileName << "."; } } static void processNode(xmlTextReaderPtr reader) { const xmlChar *name, *value; name = xmlTextReaderConstName(reader); if(name == NULL) name = BAD_CAST "--"; value = xmlTextReaderConstValue(reader); printf("%d %d %s %d %d", xmlTextReaderDepth(reader), xmlTextReaderNodeType(reader), name, xmlTextReaderIsEmptyElement(reader), xmlTextReaderHasValue(reader)); if(value == NULL) printf("\n"); else { if(xmlStrlen(value) > 40) printf(" %.40s...\n", value); else printf(" %s\n", value); } } #endif