diff --git a/src/plugins/plugin_blog_import.py b/src/plugins/plugin_blog_import.py index b88bf4ef..6b136e5f 100755 --- a/src/plugins/plugin_blog_import.py +++ b/src/plugins/plugin_blog_import.py @@ -282,7 +282,7 @@ class BlogImportPlugin(object): tmp_dir = tempfile.mkdtemp() try: # TODO: would be nice to also update the hyperlinks to these images, e.g. when you have - for img_elt in xml_tools.findAll(top_elt, ['img']): + for img_elt in xml_tools.findAll(top_elt, names=[u'img']): yield self.imgFilters(client, img_elt, options, opt_host, tmp_dir) finally: os.rmdir(tmp_dir) # XXX: tmp_dir should be empty, or something went wrong diff --git a/src/tools/xml_tools.py b/src/tools/xml_tools.py index 671133a8..742258b7 100644 --- a/src/tools/xml_tools.py +++ b/src/tools/xml_tools.py @@ -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