1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
// Copyright (c) 2002 David Muse
// See the file COPYING for more information
#include <rudiments/xmlsax.h>
#include <stdio.h>
class myxmlsax : public xmlsax {
public:
myxmlsax();
private:
bool xmlVersionStart();
bool xmlVersionEnd();
bool doctypeStart(char *name);
bool externalSubset(char *filename);
bool doctypeEnd();
bool tagStart(char *name);
bool attributeName(char *name);
bool attributeValue(char *value);
bool text(char *string);
bool tagEnd(char *name);
bool comment(char *string);
bool cdata(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(char *name) {
printf("DOCTYPE start: %s\n",name);
return true;
}
bool myxmlsax::externalSubset(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(char *name) {
indent(ind);
printf("tagStart: %s\n",name);
ind++;
return true;
}
bool myxmlsax::attributeName(char *name) {
indent(ind+1);
printf("attribute name: %s\n",name);
return true;
}
bool myxmlsax::attributeValue(char *value) {
indent(ind+1);
printf("attribute value: %s\n",value);
return true;
}
bool myxmlsax::text(char *string) {
indent(ind+1);
printf("text: \n%s\n",string);
return true;
}
bool myxmlsax::tagEnd(char *name) {
ind--;
indent(ind);
printf("tagEnd: %s\n",name);
return true;
}
bool myxmlsax::comment(char *string) {
indent(ind);
printf("comment: \n%s\n",string);
return true;
}
bool myxmlsax::cdata(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");
}
|