in src/xml/tspp/XmlPullParser.cpp [321:406]
int XmlPullParser::next()
{
reset();
if (parse() != -1) {
if (STag == event || EmptyElemTag == event || ETag == event) {
TOKEN *p= token->get();
int ii= 0;
if (p->type == TOKEN::Prefix) {
_ns= 0xffff;
name= 1;
p += 2;
ii += 2;
}
else {
_ns = -1;
name= 0;
p++;
ii++;
}
if (ETag == event)
return event;
int count= token->count();
while (ii < count) {
if (p->type == TOKEN::Prefix) {
if (!p->compare("xmlns", 5)) {
NAMESPACE &n= ns->append();
p++;
n.prefix= p->toString();
p++;
n.uri= p->toString();
p++;
ii += 3;
}
else {
ATTR &a= attr->append();
a.prefix= ii++;
a.name= ii++;
a.value= ii++;
a.ns= -1;
p += 3;
}
}
else {
if (!p->compare("xmlns", 5)) {
NAMESPACE &n= ns->append();
n.prefix= NULL;
p++;
n.uri= p->toString();
p++;
ii += 2;
}
else {
ATTR &a= attr->append();
a.prefix= -1;
a.name= ii++;
a.value= ii++;
a.ns= -1;
p += 2;
}
}
}
if (depth->count()) {
DEPTH &l= depth->getLast();
DEPTH &m= depth->append();
m.first= l.first+l.count;
m.total= ns->count();
m.count= m.total-l.total;
}
else {
DEPTH &m= depth->append();
m.first= 0;
m.total= ns->count();
m.count= m.total;
}
_ns= resolve(_ns == -1 ? NULL : token->get());
}
else if (XMLDecl == event)
{
//Do not return this event. Process it for internal use only
//Get and return next event.
return next();
}
return event;
}
return -1;
}