code_berzerker wrote: > Thanks for help. Thats inspiring, tho not exactly what I need, coz > ignoring document order is requirement (ignoring changes in order of > different siblings of the same type, etc). I plan to try something > like that: > > def xmlCmp(xmlStr1, xmlStr2): > et1 = etree.XML(xmlStr1) > et2 = etree.XML(xmlStr2) > > queue = [] > tmpq = deque([et1]) > tmpq2 = deque([et2]) > > while tmpq: > el = tmpq.popleft() > tmpq.extend(el) > queue.append(el.tag) > > while queue: > el = queue.pop() > foundEl = findMatchingElem(el, et2) > if foundEl: > et1.remove(el) > tmpq2.remove(foundEl) > else: > return False > > if len(tmpq2) == 0: > return True > else: > return False
If document order doesn't matter, try sorting the elements of each level in the two documents by some arbitrary deterministic key, such as (tag name, text, attr count, whatever), and then compare them in order, instead of trying to find matches in multiple passes. itertools.groupby() might be your friend here. Stefan -- http://mail.python.org/mailman/listinfo/python-list