64
65
void DocHandlers::pi(unsigned int targetCount, const XMLChar* targetString, unsigned int dataCount, const XMLChar* dataString) {
68
class CountHandlers : public DocHandlers {
70
double res_attr[MAX_LEVELS+1];
71
double res_sum[MAX_LEVELS+1];
72
int res_count[MAX_LEVELS+1];
79
void startElement(unsigned int namespaceTag, unsigned int elemNameCount, const XMLChar* elemName, unsigned int nAttribute, SAXAttribute** attrs);
81
void characters(unsigned int count, const XMLChar* string, bool more);
84
void CountHandlers::startDocument() {
89
void CountHandlers::startElement(unsigned int namespaceTag, unsigned int elemNameCount, const XMLChar* elemName, unsigned int nAttribute, SAXAttribute** attrs) {
94
for (i = 0; i<nAttribute; i++) {
95
if (attrs[i]->valueString) {
96
res = get_value_0(attrs[i]->valueString, attrs[i]->valueCount);
102
res_attr[level] = res;
103
if (++level == MAX_LEVELS) {
104
printf("XML structure is too deep, only %i levels are supported\n", MAX_LEVELS);
109
void CountHandlers::endElement() {
110
if (res_count[level] > 3) {
111
res_total += res_sum[level];
115
if (res_count[level]) {
116
res_sum[level]+=res_attr[level];
118
res_sum[level]=res_attr[level];
123
void CountHandlers::characters(unsigned int count, const XMLChar* string, bool more) {
124
if ((string)&&(!more)) {
125
double res = get_value_0(string,count);
126
if (res) res_attr[level-1] = res;
67
132
SAXParserFactory* saximpl;
68
133
SAXParser *parser;
69
134
DocHandlers *handler;
72
137
saximpl = SAXParserFactory::newInstance();
73
138
parser = saximpl->createSAXParser();
75
handler=new DocHandlers;
141
handler=new CountHandlers;
143
handler=new DocHandlers;
76
145
parser->setContentHandler(handler);
77
146
//parser->setDTDHandler(&sax2CoreDumper);
78
147
//parser->setLexicalHandler(&sax2CoreDumper);