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
This commit is contained in:
Goffi 2017-01-03 18:51:50 +01:00
commit 791be3a4ad

View file

@ -1405,19 +1405,25 @@ def getText(node):
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