File: xmls.C

package info (click to toggle)
librudiments0 0.27-3
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 4,528 kB
  • ctags: 2,284
  • sloc: cpp: 14,657; sh: 7,547; ansic: 2,664; makefile: 945; xml: 15
file content (132 lines) | stat: -rw-r--r-- 2,825 bytes parent folder | download
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='&amp;&lt;&gt;&apos;&quot;' name12='&amp&lt&gt&apos&quot' 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\
&amp;&lt;&gt;&apos;&quot;\n\
&amp&lt&gt&apos&quot\n\
&&&&&\n\
<![CDATA[ test [ test [ test [test]]]]]>\n\
</test>\n\
");
	printf("=====================================================\n");
	x.parseFile("xmls.xml");
}