00001 #include <string>
00002 #include <iostream>
00003 #include <fstream>
00004 #include "easyxml.hxx"
00005
00006 using std::string;
00007 using std::ifstream;
00008 using std::cout;
00009 using std::cerr;
00010 using std::endl;
00011
00012 class MyVisitor : public XMLVisitor
00013 {
00014 public:
00015 virtual void startXML () {
00016 cout << "Start XML" << endl;
00017 }
00018 virtual void endXML () {
00019 cout << "End XML" << endl;
00020 }
00021 virtual void startElement (const char * name, const XMLAttributes &atts) {
00022 cout << "Start element " << name << endl;
00023 for (int i = 0; i < atts.size(); i++)
00024 cout << " " << atts.getName(i) << '=' << atts.getValue(i) << endl;
00025 }
00026 virtual void endElement (const char * name) {
00027 cout << "End element " << name << endl;
00028 }
00029 virtual void data (const char * s, int len) {
00030 cout << "Character data " << string(s,len) << endl;
00031 }
00032 virtual void pi (const char * target, const char * data) {
00033 cout << "Processing instruction " << target << ' ' << data << endl;
00034 }
00035 virtual void warning (const char * message, int line, int column) {
00036 cout << "Warning: " << message << " (" << line << ',' << column << ')'
00037 << endl;
00038 }
00039 virtual void error (const char * message, int line, int column) {
00040 cout << "Error: " << message << " (" << line << ',' << column << ')'
00041 << endl;
00042 }
00043 };
00044
00045 int main (int ac, const char ** av)
00046 {
00047 MyVisitor visitor;
00048
00049 for (int i = 1; i < ac; i++) {
00050 ifstream input(av[i]);
00051 cout << "Reading " << av[i] << endl;
00052 try {
00053 readXML(input, visitor);
00054
00055 } catch (const sg_exception& e) {
00056 cerr << "Error: file '" << av[i] << "' " << e.getFormattedMessage() << endl;
00057 return -1;
00058
00059 } catch (...) {
00060 cerr << "Error reading from " << av[i] << endl;
00061 return -1;
00062 }
00063 }
00064 return 0;
00065 }