Mercurial > libervia-backend
diff src/tools/xml_tools.py @ 1819:c271087d2020
core (xml_tools): added a method to find all elements corresponding to criteria
author | Goffi <goffi@goffi.org> |
---|---|
date | Fri, 22 Jan 2016 20:24:17 +0100 |
parents | 7e6342de71fb |
children | 29564cec913f |
line wrap: on
line diff
--- a/src/tools/xml_tools.py Fri Jan 22 20:24:17 2016 +0100 +++ b/src/tools/xml_tools.py Fri Jan 22 20:24:17 2016 +0100 @@ -1395,3 +1395,20 @@ if child.nodeType == child.TEXT_NODE: data.append(child.wholeText) return u"".join(data) + +def findAll(elt, names=None, namespaces=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 + None to accept every names + @param namespace(unicode): URIs to match + None to accept every namespaces + """ + + for child in elt.elements(): + if ((not names or child.name in names) and + (not namespaces or child.uri in namespaces)): + yield child + for found in findAll(child, names): + yield found