diff options
author | Stefan Behnel <stefan_ml@behnel.de> | 2017-09-30 10:02:42 +0200 |
---|---|---|
committer | Stefan Behnel <stefan_ml@behnel.de> | 2017-09-30 10:02:42 +0200 |
commit | 8196c7b0a0b72b3d2cba4200e96ca3ec9456a76a (patch) | |
tree | ed1478aed0bcda6853fe4cf67812ffa6e21a0d0a /src/lxml/_elementpath.py | |
parent | 6a9fd695e7a65d8831ea100cb6e2207213a58030 (diff) | |
download | python-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.py | 19 |
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 |