// Copyright (c) 2002 David Muse
// See the file COPYING for more information
#include <rudiments/xmlsax.h>
#include <stdio.h>
#ifdef RUDIMENTS_NAMESPACE
using namespace rudiments;
#endif
class myxmlsax : public xmlsax {
public:
myxmlsax();
private:
bool xmlVersionStart();
bool xmlVersionEnd();
bool doctypeStart(const char *name);
bool externalSubset(const char *filename);
bool doctypeEnd();
bool tagStart(const char *name);
bool attributeName(const char *name);
bool attributeValue(const char *value);
bool text(const char *string);
bool tagEnd(const char *name);
bool comment(const char *string);
bool cdata(const char *string);
void indent(int spaces);
int ind;
};
myxmlsax::myxmlsax() : xmlsax() {
ind=0;
}
bool myxmlsax::xmlVersionStart() {
printf("XML version start:\n");
return true;
}
bool myxmlsax::xmlVersionEnd() {
printf("XML version end:\n");
return true;
}
bool myxmlsax::doctypeStart(const char *name) {
printf("DOCTYPE start: %s\n",name);
return true;
}
bool myxmlsax::externalSubset(const char *filename) {
printf(" external subset: %s\n",filename);
return true;
}
bool myxmlsax::doctypeEnd() {
printf("DOCTYPE end:\n");
return true;
}
void myxmlsax::indent(int spaces) {
for (int i=0; i<spaces; i++) {
printf(" ");
}
}
bool myxmlsax::tagStart(const char *name) {
indent(ind);
printf("tagStart: %s\n",name);
ind++;
return true;
}
bool myxmlsax::attributeName(const char *name) {
indent(ind+1);
printf("attribute name: %s\n",name);
return true;
}
bool myxmlsax::attributeValue(const char *value) {
indent(ind+1);
printf("attribute value: %s\n",value);
return true;
}
bool myxmlsax::text(const char *string) {
indent(ind+1);
printf("text: \n%s\n",string);
return true;
}
bool myxmlsax::tagEnd(const char *name) {
ind--;
indent(ind);
printf("tagEnd: %s\n",name);
return true;
}
bool myxmlsax::comment(const char *string) {
indent(ind);
printf("comment: \n%s\n",string);
return true;
}
bool myxmlsax::cdata(const char *string) {
indent(ind);
printf("cdata: \n%s\n",string);
return true;
}
int main(int argc, const char **argv) {
myxmlsax x;
printf("=====================================================\n");
x.parseString("\n\
<?xml version=\"1.0\" ?>\n\
<!DOCTYPE test SYSTEM \"test.dtd\" [ test [test [test [test]]]]>\n\
<test>start test text\n\
<tag1 name11='&<>'"' name12='&<>&apos"' name13='&&&&&' / > end tag1 text\n\
<tag2 name21=\"value21\" name22=\"value22\"> start tag2 text\n\
<tag3 name31=\"value31\" name32=\"value32\"> start tag3 text\n\
<tag4 name42=\"value41\" name42=\"value42\" /> end tag4 end text\n\
</tag3> end tag3 text\n\
<!-- test comment -->\n\
<?target test=\"test1\"?>\n\
</tag2> end tag2 text\n\
&<>'"\n\
&<>&apos"\n\
&&&&&\n\
<![CDATA[ test [ test [ test [test]]]]]>\n\
</test>\n\
");
printf("=====================================================\n");
x.parseFile("xmls.xml");
}