def __xml__(self): element = lxml.etree.Element('domain') element.set('id', 'domain-' + str(self.qid)) element.set('class', self.__class__.__name__) element.append(self.xml_properties()) features = lxml.etree.Element('features') for feature in self.features: node = lxml.etree.Element('feature', name=feature) node.text = self.features[feature] features.append(node) element.append(features) for devclass in self.devices: devices = lxml.etree.Element('devices') devices.set('class', devclass) for device in self.devices[devclass].assignments(persistent=True): node = lxml.etree.Element('device') node.set('backend-domain', device.backend_domain.name) node.set('id', device.ident) for key, val in device.options.items(): option_node = lxml.etree.Element('option') option_node.set('name', key) option_node.text = val node.append(option_node) devices.append(node) element.append(devices) tags = lxml.etree.Element('tags') for tag in self.tags: node = lxml.etree.Element('tag', name=tag) tags.append(node) element.append(tags) return element