All pastes #554384 Raw Edit

Unnamed

public text v1 · immutable
·published 2007-06-10 03:48 UTC
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