diff --git a/scrapy/contrib_exp/iterators.py b/scrapy/contrib_exp/iterators.py
index d42a25c3f..0f3a8c694 100644
--- a/scrapy/contrib_exp/iterators.py
+++ b/scrapy/contrib_exp/iterators.py
@@ -7,14 +7,14 @@ def xmliter_lxml(obj, nodename, namespace=None):
reader = _StreamReader(obj)
tag = '{%s}%s' % (namespace, nodename) if namespace else nodename
iterable = etree.iterparse(reader, tag=tag, encoding=reader.encoding)
+ selxpath = '//' + ('x:%s' % nodename if namespace else nodename)
for _, node in iterable:
nodetext = etree.tostring(node)
node.clear()
xs = XmlXPathSelector(text=nodetext)
if namespace:
xs.register_namespace('x', namespace)
- nodename = 'x:%s' % nodename
- yield xs.select('//' + nodename)[0]
+ yield xs.select(selxpath)[0]
class _StreamReader(object):
diff --git a/scrapy/tests/test_utils_iterators.py b/scrapy/tests/test_utils_iterators.py
index 79435d615..06fb4effe 100644
--- a/scrapy/tests/test_utils_iterators.py
+++ b/scrapy/tests/test_utils_iterators.py
@@ -110,6 +110,7 @@ class LxmlXmliterTestCase(XmliterTestCase):
This is item 1
http://www.mydummycompany.com/items/1
http://www.mydummycompany.com/images/item1.jpg
+ http://www.mydummycompany.com/images/item2.jpg
@@ -122,6 +123,8 @@ class LxmlXmliterTestCase(XmliterTestCase):
namespace_iter = self.xmliter(response, 'image_link', 'http://base.google.com/ns/1.0')
node = namespace_iter.next()
self.assertEqual(node.select('text()').extract(), ['http://www.mydummycompany.com/images/item1.jpg'])
+ node = namespace_iter.next()
+ self.assertEqual(node.select('text()').extract(), ['http://www.mydummycompany.com/images/item2.jpg'])
class UtilsCsvTestCase(unittest.TestCase):