Set the value and/or attributes of an xml element, marked with the matching eid attribute, using the
        properties of the specified object.

def set_properties(self, eid, value, idx='*'):
        """
        Set the value and/or attributes of an xml element, marked with the matching eid attribute, using the
        properties of the specified object.
        """
        if value.__class__ not in Template.class_cache:
            props = []
            for name in dir(value.__class__):
                prop = getattr(value.__class__, name)
                if type(prop) == property and hasattr(prop, 'fget'):
                    props.append((name, prop))
            Template.class_cache[value.__class__] = props
        for (name, prop) in Template.class_cache[value.__class__]:
            new_eid = ''.join([eid, ':', name])
            self.set_value(new_eid, prop.fget(value), idx)
            self.set_attribute(eid, name, prop.fget(value), idx)