23
private class CountHandler(Ch = char) : SaxHandler!(Ch) {
24
public double res_total;
25
double res_attr[MAX_LEVELS+1];
26
double res_sum[MAX_LEVELS+1];
27
int res_count[MAX_LEVELS+1];
30
public void startDocument() {
36
public void startElement(Ch[] uri, Ch[] localName, Ch[] qName, Attribute!(Ch)[] atts) {
41
foreach (cur_attr; atts) {
42
auto value = cur_attr.value;
45
res = Float.toFloat(value);
53
// printf("%i %lf\n", level, res);
54
res_attr[level] = res;
55
if (++level == MAX_LEVELS) {
56
Stdout.formatln("XML structure is too deep, only %i levels are supported\n", MAX_LEVELS);
57
throw new Exception("XML structure is too deep");
62
public void endElement(Ch[] uri, Ch[] localName, Ch[] qName) {
63
if (res_count[level] > 3) {
64
res_total += res_sum[level];
68
if (res_count[level]) {
69
res_sum[level]+=res_attr[level];
71
res_sum[level]=res_attr[level];
76
public void characters(Ch[] ch) {
79
double res = Float.toFloat(ch);
80
if (res) res_attr[level-1] = res;
85
// Stdout.formatln(ch);
23
90
SaxParser!(char) parser = null;
24
ContentHandler!(char) handler = null;
91
SaxHandler!(char) handler = null;
26
93
extern(C) void initXML(TestData *td) {
27
handler = new ContentHandler!(char);
28
94
parser = new SaxParser!(char);
96
if (get_walk_mode()) {
97
handler = new CountHandler!(char);
99
handler = new ContentHandler!(char);
29
102
parser.setSaxHandler(handler);