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:
parent
66e393336b
commit
791be3a4ad
1 changed files with 12 additions and 6 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue