17
void walkXML(TestData *td, uint iter) {
19
double res_attr[MAX_LEVELS+1];
20
double res_sum[MAX_LEVELS+1];
21
int res_count[MAX_LEVELS+1];
26
auto parser = new PullParser!(char) (td.xml[0..td.xmllen]);
30
case XmlTokenType.StartElement:
32
if (++level == MAX_LEVELS) {
33
Stdout.formatln("XML structure is too deep, only %i levels are supported\n", MAX_LEVELS);
34
throw new Exception("XML structure is too deep");
38
case XmlTokenType.Attribute:
39
if ((!res_attr[level-1])&&(parser.value)) {
41
double res = Float.toFloat(parser.value);
42
if (res) res_attr[level-1] = res;
47
case XmlTokenType.EndElement:
48
if (res_count[level] > 3) {
49
res_total += res_sum[level];
52
if (res_count[level]) {
53
res_sum[level]+=res_attr[level];
55
res_sum[level]=res_attr[level];
59
case XmlTokenType.Data:
62
double res = Float.toFloat(parser.value);
63
if (res) res_attr[level-1] = res;
72
// Stdout.formatln("Sum {}", res_total);
16
76
extern(C) void parseXML(TestData *td, uint iter) {
78
if (get_walk_mode()) {
79
return walkXML(td, iter);
18
82
auto parser = new PullParser!(char) (td.xml[0..td.xmllen]);
20
84
type = parser.next;