docs: 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)