diff options
-rw-r--r-- | src/lxml/ElementInclude.py | 3 | ||||
-rw-r--r-- | src/lxml/_elementpath.py | 30 |
2 files changed, 23 insertions, 10 deletions
diff --git a/src/lxml/ElementInclude.py b/src/lxml/ElementInclude.py index d78114c1..471893fa 100644 --- a/src/lxml/ElementInclude.py +++ b/src/lxml/ElementInclude.py @@ -50,7 +50,8 @@ Python, ElementTree compatible implementation that supports a simple form of custom URL resolvers. """ -import copy, etree +from lxml import etree +import copy from urlparse import urljoin from urllib2 import urlopen diff --git a/src/lxml/_elementpath.py b/src/lxml/_elementpath.py index 8e9484e5..6c9e06a7 100644 --- a/src/lxml/_elementpath.py +++ b/src/lxml/_elementpath.py @@ -174,17 +174,23 @@ def _build_path_iterator(path): if path[:1] == "/": raise SyntaxError("cannot use absolute path on element") stream = iter(xpath_tokenizer(path)) - next = stream.next; token = next() + try: + _next = stream.next + except AttributeError: + # Python 3 + def _next(): + return next(stream) + token = _next() selector = [] while 1: try: - selector.append(ops[token[0]](next, token)) + selector.append(ops[token[0]](_next, token)) except StopIteration: raise SyntaxError("invalid path") try: - token = next() + token = _next() if token[0] == "/": - token = next() + token = _next() except StopIteration: break return selector @@ -204,8 +210,14 @@ def iterfind(elem, path): # Find first matching object. def find(elem, path): + it = iterfind(elem, path) try: - return iterfind(elem, path).next() + try: + _next = it.next + except AttributeError: + return next(it) + else: + return _next() except StopIteration: return None @@ -219,8 +231,8 @@ def findall(elem, path): # Find text for first matching object. def findtext(elem, path, default=None): - try: - elem = iterfind(elem, path).next() - return elem.text - except StopIteration: + el = find(elem, path) + if el is None: return default + else: + return el.text |