28 #include <libxml/parserInternals.h>
46 DEBTRACE(
"Problem with parser: final stack level should be 0 and not " <<
_level);
59 DEBTRACE(
"parser::SetUserDataAndPush, stack size: " << pp->
_level);
93 _counts=
new std::map<std::string,int>;
102 if((*_counts).find(el)==(*_counts).end())
105 (*
_counts)[el]=(*_counts)[el]+1;
110 if(
_orders.count(el)==0)
return;
113 std::string msg=
"unexpected "+el+
" element (wrong order)";
127 std::stringstream msg;
128 msg <<
"unexpected "+name+
" element (count="<<(*_counts)[name];
129 msg <<
" > maxOccurs=" << max <<
")";
138 std::stringstream msg;
139 msg<<
"expected "+name+
" element (count="<<(*_counts)[name];
140 msg <<
" < minOccurs=" << min <<
")";
151 ncount=ncount+(*_counts)[
names[
i]];
156 std::stringstream msg;
157 msg<<
"unexpected "+el+
" element (choice count="<<ncount<<
" > maxOccurs=" << max <<
")";
168 ncount=ncount+(*_counts)[
names[
i]];
173 std::stringstream msg;
174 msg <<
"expected element ";
181 msg <<
"(choice count="<<ncount<<
" < minOccurs=" << min <<
")";
188 for (
int i = 0; attr[
i];
i += 2)
190 if(name == std::string(attr[
i]))
return;
199 for (
int i = 0; attr[
i];
i += 2)
207 DEBTRACE(
"parser::onStart: " << el );
222 ctxt->userData = par;
241 DEBTRACE(
"parser::start_element " << name);
263 DEBTRACE(
"parser::characters " << len);
269 const xmlChar* value)
276 const xmlChar* value,
285 const char* fmt, ...)
291 std::string format =
"%s";
295 parv = va_arg(args,
char*);
298 else std::cerr << __FILE__ <<
" [" << __LINE__ <<
"] : "
299 <<
"error format not taken into account: " << fmt << std::endl;
304 const char* fmt, ...)
310 std::string format =
"%s";
314 parv = va_arg(args,
char*);
317 else std::cerr << __FILE__ <<
" [" << __LINE__ <<
"] : "
318 <<
"error format not taken into account: " << fmt << std::endl;
323 const char* fmt, ...)
329 std::string format =
"%s";
333 parv = va_arg(args,
char*);
336 else std::cerr << __FILE__ <<
" [" << __LINE__ <<
"] : "
337 <<
"error format not taken into account: " << fmt << std::endl;
virtual void error(const std::string &message, const char *filename, int line)
Base class for all schema objects.
virtual Logger * getLogger(const std::string &name)
YACS::ENGINE::Proc * currentProc
_xmlParserCtxt * saxContext
virtual void charData(const XML_Char *s, int len)
virtual void minchoice(std::string *names, int min)
static void XMLCALL start_element(void *data, const xmlChar *name, const xmlChar **p)
virtual void maxcount(std::string name, int max, std::string &el)
static void XMLCALL warning(void *data, const char *fmt,...)
virtual void SetUserDataAndPush(parser *pp)
virtual void mincount(std::string name, int min)
std::stack< parser * > & getStack()
virtual void checkOrder(std::string &el)
static std::stack< parser * > _stackParser
static void XMLCALL fatal_error(void *data, const char *fmt,...)
virtual void onStart(const XML_Char *el, const XML_Char **attr)
static void XMLCALL end_document(void *data)
static void XMLCALL comment(void *data, const xmlChar *value)
virtual void required(const std::string &name, const XML_Char **attr)
virtual void buildAttr(const XML_Char **attr)
static void XML_SetUserData(_xmlParserCtxt *ctxt, parser *par)
static parser main_parser
static void XMLCALL error(void *data, const char *fmt,...)
std::map< std::string, int > * _counts
static void XMLCALL cdata_block(void *data, const xmlChar *value, int len)
static void XMLCALL end_element(void *data, const xmlChar *name)
virtual void incrCount(const XML_Char *elem)
virtual void maxchoice(std::string *names, int max, std::string &el)
virtual void onEnd(const XML_Char *el, parser *child)
std::map< std::string, int > _orders
std::stack< std::map< std::string, int > * > _stackCount
static void XMLCALL start_document(void *data)
void logError(const std::string &reason)
static void XMLCALL characters(void *data, const xmlChar *ch, int len)
std::stack< int > _stackOrder