def ensure_id(elem): root = getroot(elem) eid = elem.get('id') if not eid: eid = ensure_unique('id', frozenset(XPath('//*/@id')(root))) elem.set('id', eid) return eid