Allow for a custom element finder
And end up with less duplicate code!
This commit is contained in:
parent
d6213643c8
commit
3f2d8ae185
1 changed files with 14 additions and 7 deletions
|
|
@ -662,16 +662,23 @@ class ListElement(AbstractElement):
|
||||||
|
|
||||||
return self.__iter__()
|
return self.__iter__()
|
||||||
|
|
||||||
|
def find_elements(self):
|
||||||
|
"""
|
||||||
|
Get the nodes that will have to be processed.
|
||||||
|
This method can be overridden if xpath filters are not
|
||||||
|
sufficient.
|
||||||
|
"""
|
||||||
|
if self.item_xpath is not None:
|
||||||
|
for el in self.el.xpath(self.item_xpath):
|
||||||
|
yield el
|
||||||
|
else:
|
||||||
|
yield self.el
|
||||||
|
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
self.parse(self.el)
|
self.parse(self.el)
|
||||||
|
|
||||||
if self.item_xpath is not None:
|
for el in self.find_elements():
|
||||||
for el in self.el.xpath(self.item_xpath):
|
for obj in self.handle_element(el):
|
||||||
for obj in self.handle_element(el):
|
|
||||||
if not self.flush_at_end:
|
|
||||||
yield obj
|
|
||||||
else:
|
|
||||||
for obj in self.handle_element(self.el):
|
|
||||||
if not self.flush_at_end:
|
if not self.flush_at_end:
|
||||||
yield obj
|
yield obj
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue