Mercurial > libervia-backend
diff src/tools/xml_tools.py @ 2108:70f23bc7859b
core (xml_tools): fixed findAll
- names and namespases arguments haven been inverted to be in the same order as for domish.Element.elements
- fixed bad copy of elements in recursions
- check if childrens are IElements
- namespaces and names can now be basestrings instead of iterables
author | Goffi <goffi@goffi.org> |
---|---|
date | Tue, 03 Jan 2017 18:51:50 +0100 |
parents | c2fdee1bd908 |
children | 5defafc8ede6 |
line wrap: on
line diff
--- a/src/tools/xml_tools.py Sun Jan 01 16:39:26 2017 +0100 +++ b/src/tools/xml_tools.py Tue Jan 03 18:51:50 2017 +0100 @@ -1405,19 +1405,25 @@ data.append(child.wholeText) return u"".join(data) -def findAll(elt, names=None, namespaces=None): +def findAll(elt, namespaces=None, names=None, ): """Find child element at any depth matching criteria @param elt(domish.Element): top parent of the elements to find - @param names(iterable, None): names to match + @param names(iterable[unicode], basestring, None): names to match None to accept every names - @param namespace(unicode): URIs to match + @param namespace(iterable[unicode], basestring, None): URIs to match None to accept every namespaces + @return ((G)domish.Element): found elements """ + if isinstance(namespaces, basestring): + namespaces=tuple((namespaces,)) + if isinstance(names, basestring): + names=tuple((names,)) for child in elt.elements(): - if ((not names or child.name in names) and + if (domish.IElement.providedBy(child) and + (not names or child.name in names) and (not namespaces or child.uri in namespaces)): yield child - for found in findAll(child, names): + for found in findAll(child, namespaces, names): yield found