New submission from Niels Thykier <ni...@thykier.net>: Hi,
The only official supported iteration over all attributes on an element via the minidom XML API require an O(n²) iterator. It happens because the `item` method generates a list of all attribute names, look up the attribute name at the given index and then throws away the list (only to recompute it on next lookup). There are also a `.values()` method that looks very promising, only it has "strings-attached" in the form of the following disclaimer: """There are also experimental methods that give this class more mapping behavior. [...]""" (source: https://docs.python.org/3/library/xml.dom.html) The word "experimental" makes it hard for me to ask projects to migrate to `.values()` because I have to convince them to accept the risk of adopting the "unsupported APIs". For me, any of the following would solve the issue: * Bless the mapping based API as supported to the same extend as `item` + `length` in the DOM API. * Optimize `item` to avoid the performance issue. * Provide an alternative (but supported) way of iterating over all attributes. Preferably one that enables you to get the node directly without having to use `Element.getAttributeNode()` or similar. The code in question highlighting the problematic code in the minidom API: ``` class NamedNodeMap(object): [...] def item(self, index): try: return self[list(self._attrs.keys())[index]] except IndexError: return None ``` ---------- components: XML messages: 369384 nosy: nthykier priority: normal severity: normal status: open title: The only supported minidom attribute iteration (NamedNodeMap) is O(n^2) type: performance versions: Python 3.8 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue40689> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com