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):