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