1
2# extremely simple XML writer
3#
4# This is to remove libxml2 dependency on platforms where it's
5# difficult to build
6#
7# 2003 Attila Tajti <attis@spacehawks.hu>
8
9class XMLDoc:
10
11	def __init__(self, version):
12		self.version = version
13		self.root_element = None
14
15	def saveFile(self, filename):
16		f = file(filename, "w")
17		f.write('<?xml version="' + self.version + '"?>\n')
18		self.root_element._write(f, 0)
19
20	def saveFormatFile(self, filename, fmt):
21		self.saveFile(filename)
22
23	def freeDoc(self):
24		pass
25
26class XMLNode:
27
28	def __init__(self, name):
29		self.name = name
30		self.props = []
31		self.children = []
32		self.content = None
33
34	def docSetRootElement(self, doc):
35		doc.root_element = self
36
37	def newChild(self, namespace, name, content):
38		if namespace:
39			fullname = namespace + ':' + name
40		else:
41			fullname = name
42		child = XMLNode(fullname)
43		child.content = content
44		self.children.append(child)
45		return child
46
47	def setProp(self, name, value):
48		self.props.append((name, value))
49
50	def _write(self, f, indent):
51		#istr = "  " * indent
52		istr = "\t" * indent
53
54		# put together our tag
55		tag = self.name
56		for prop in self.props:
57			name, value = prop
58			tag += ' ' + name + '="' + value + '"'
59
60		# print tag, or children between tags
61		if self.children:
62			f.write(istr + '<%s>\n' % tag)
63			for child in self.children:
64				child._write(f, indent + 1)
65			f.write(istr + '</%s>\n' % self.name)
66		else:
67			f.write(istr + '<%s/>\n' % tag)
68
69def newDoc(version):
70	return XMLDoc(version)
71
72def newNode(name):
73	return XMLNode(name)
74
75
76