summaryrefslogtreecommitdiff
path: root/src/lxml/_elementpath.py
diff options
context:
space:
mode:
authorStefan Behnel <stefan_ml@behnel.de>2017-09-30 10:02:42 +0200
committerStefan Behnel <stefan_ml@behnel.de>2017-09-30 10:02:42 +0200
commit8196c7b0a0b72b3d2cba4200e96ca3ec9456a76a (patch)
treeed1478aed0bcda6853fe4cf67812ffa6e21a0d0a /src/lxml/_elementpath.py
parent6a9fd695e7a65d8831ea100cb6e2207213a58030 (diff)
downloadpython-lxml-8196c7b0a0b72b3d2cba4200e96ca3ec9456a76a.tar.gz
Support ElementPath text predicates for current node, like "[.='text']".
Diffstat (limited to 'src/lxml/_elementpath.py')
-rw-r--r--src/lxml/_elementpath.py19
1 files changed, 13 insertions, 6 deletions
diff --git a/src/lxml/_elementpath.py b/src/lxml/_elementpath.py
index add48e19..de75962d 100644
--- a/src/lxml/_elementpath.py
+++ b/src/lxml/_elementpath.py
@@ -174,14 +174,21 @@ def prepare_predicate(next, token):
yield elem
break
return select
- if signature == "-='" and not re.match(r"-?\d+$", predicate[0]):
- # [tag='value']
+ if signature == ".='" or (signature == "-='" and not re.match(r"-?\d+$", predicate[0])):
+ # [.='value'] or [tag='value']
tag = predicate[0]
value = predicate[-1]
- def select(result):
- for elem in result:
- for e in elem.iterchildren(tag):
- if "".join(e.itertext()) == value:
+ if tag:
+ def select(result):
+ for elem in result:
+ for e in elem.iterchildren(tag):
+ if "".join(e.itertext()) == value:
+ yield elem
+ break
+ else:
+ def select(result):
+ for elem in result:
+ if "".join(elem.itertext()) == value:
yield elem
break
return select