rendered paste body#include <iostream>
#include <cstdlib>
#include <stdio.h>
#include <libxml/xmlreader.h>
#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