00001 #ifndef _IT_BUS_PDK_XML_SAX_PARSER_H_
00002 #define _IT_BUS_PDK_XML_SAX_PARSER_H_
00003
00004
00005
00006
00007 #include <it_cal/auto_ptr.h>
00008 #include <it_bus_pdk/xml_sax_handler.h>
00009 #include <it_bus/binary_buffer.h>
00010 #include <it_bus_pdk/xml_parse_exception.h>
00011 #include <it_bus/api_defines.h>
00012
00013 namespace xercesc_2_4
00014 {
00015 class SAX2XMLReader;
00016 class InputSource;
00017 }
00018
00019 namespace IT_Bus
00020 {
00021
00022 class IT_BUS_XML_API XMLSaxParser
00023 {
00024 public:
00025 XMLSaxParser();
00026
00027 XMLSaxParser(
00028 UInt parser_recycle_level,
00029 Boolean validating = IT_false
00030 );
00031
00032 virtual
00033 ~XMLSaxParser();
00034
00035 void
00036 parse_from_url(
00037 const String& url,
00038 XMLSaxHandler & sax_handler
00039 ) IT_THROW_DECL((XMLParseException));
00040
00041 void
00042 parse_from_file(
00043 const String& file_name,
00044 XMLSaxHandler & sax_handler
00045 ) IT_THROW_DECL((XMLParseException));
00046
00047 void
00048 parse(
00049 const BinaryBuffer& input_buffer,
00050 XMLSaxHandler & sax_handler
00051 ) IT_THROW_DECL((XMLParseException));
00052
00053 Boolean
00054 is_validating()
00055 {
00056 return m_validating;
00057 }
00058
00059 void
00060 load_grammar_from_url(const String & schema_url);
00061
00062 void
00063 load_grammar(const BinaryBuffer & input_source);
00064
00065 protected :
00066
00067 void
00068 init_parser();
00069
00070 void
00071 check_parser();
00072
00073 virtual void
00074 recycle_parser();
00075
00076 void
00077 parse(
00078 xercesc_2_4::InputSource & input_source,
00079 XMLSaxHandler & sax_handler
00080 ) IT_THROW_DECL((XMLParseException));
00081
00082 xercesc_2_4::SAX2XMLReader* m_xerces_parser;
00083 UInt m_parser_recycle_level;
00084 UInt m_parse_counter;
00085 Boolean m_validating;
00086 };
00087 }
00088
00089 #endif