xpath: How do we select just the very last text node?
libxml2, lxml, xpath, xslt
Solution
Use:
(//text())[last()]
This is a FAQ.
Explanation:
The XPath pseudo-operator `//` has a lower precedence (priority), than the `[]` operator, which binds stronger to the node-test preceding it.
As in Math and in every language, the way to override default priority is by using brackets.
Problem
How do I select the globally-last text node using xpath? I tried this, but it gives me the last node in every context of the document. ``` lxml.html.fromstring('1<a>2<b>3</b>4<c>5</c>6</a>').xpath('//text()[last()]') ['1', '3', '5', '6'] ``` I can do this, but it's inefficient in both time and space, especially as the document gets large. ``` lxml.html.fromstring('1<a>2<b>3</b>4<c>5</c>6</a>').xpath('//text()[last()]')[-1] '6' ``` I tried to use an index of -1, but that gives me an empty list. I tried to use some of the reverse axes (so that I could index with 1), but I couldn't get them to work in a global context.