SAXHandler.C

Go to the documentation of this file.
00001 //////////////////////////////////////////////////////////////////////////////
00002 //
00003 // ROOT implementation of a simple SAX Handler.
00004 //
00005 // This handler uses TSAXParser, a SAX Parser using the SAX interface
00006 // of libxml2. This script will output all elements of the original xml
00007 // file, if sucessfully parsed.
00008 //
00009 // To run this program do:
00010 // .x SAXHandler.C 
00011 // 
00012 // Requires: saxexample.xml
00013 //
00014 //////////////////////////////////////////////////////////////////////////////
00015 
00016 #include <Riostream.h>
00017 #include <TList.h>
00018 #include <TSAXParser.h>
00019 #include <TXMLAttr.h>
00020 
00021 
00022 class SaxHandler {
00023 public:
00024    SaxHandler() { }
00025 
00026    void     OnStartDocument() { }
00027    void     OnEndDocument();
00028    void     OnStartElement(const char*, const TList*);
00029    void     OnEndElement(const char*);
00030    void     OnCharacters(const char*);
00031    void     OnComment(const char*);
00032    void     OnWarning(const char*);
00033    void     OnError(const char*);
00034    void     OnFatalError(const char*);
00035    void     OnCdataBlock(const char*, Int_t);
00036 };
00037 
00038 void SaxHandler::OnEndDocument()
00039 {
00040    cout << endl;
00041 }
00042 
00043 void SaxHandler::OnStartElement(const char *name, const TList *attributes)
00044 {
00045    cout << "<" << name;
00046 
00047    TXMLAttr *attr;
00048 
00049    TIter next(attributes);
00050    while ((attr = (TXMLAttr*) next())) {
00051       cout << " " << attr->GetName() << "=\"" << attr->GetValue() << "\"";
00052    }
00053 
00054    cout  << ">";
00055 }
00056 
00057 void SaxHandler::OnEndElement(const char *name)
00058 {
00059    cout << "</" << name << ">";
00060 }
00061 
00062 void SaxHandler::OnCharacters(const char *characters)
00063 {
00064    cout << characters;
00065 }
00066 
00067 void SaxHandler::OnComment(const char *text)
00068 {
00069    cout << "<!--" << text << "-->";
00070 }
00071 
00072 void SaxHandler::OnWarning(const char *text)
00073 {
00074    cout << "Warning: " << text << endl;
00075 }
00076 
00077 void SaxHandler::OnError(const char *text)
00078 {
00079    cerr << "Error: " << text << endl ;
00080 }
00081 
00082 void SaxHandler::OnFatalError(const char *text)
00083 {
00084    cerr << "FatalError: " << text << endl ;
00085 }
00086 
00087 void SaxHandler::OnCdataBlock(const char *text, Int_t len)
00088 {
00089    cout << "OnCdataBlock() " << text;
00090 }
00091 
00092 
00093 
00094 void SAXHandler()
00095 {
00096    TSAXParser *saxParser = new TSAXParser();
00097    SaxHandler *saxHandler = new SaxHandler();
00098 
00099    saxParser->ConnectToHandler("SaxHandler", saxHandler);
00100    saxParser->ParseFile("saxexample.xml");
00101 }

Generated on Tue Jul 5 15:45:12 2011 for ROOT_528-00b_version by  doxygen 1.5.1