You're not going to find it in the lxml documentation because it's basic xpath semantics, `/` at the start of the path means the path is absolute and thus the search is anchored to the document root: https://www.w3.org/TR/xpath-10/#location-paths:~:text=An%20absolute%20locati...
An absolute location path consists of / optionally followed by a relative location path. A / by itself selects the root node of the document containing the context node. If it is followed by a relative location path, then the location path selects the set of nodes that would be selected by the relative location path relative to the root node of the document containing the context node.
To search within the context node (the node from which you're invoking `xpath`) you can: - use `self::node()` or `.` (an abbreviation for the former) as the leading step - or follow the descendant (or descendant-or-self) axis explicitly e.g. `descendant::table` should have the same effect as `.//table` On 16/02/2026 16:15, lord of edges via lxml - The Python XML Toolkit wrote:
Will start by saying I am sure this is documented somehow and I probably just don't know the right word to find that documentation.
I'm trying to query a table from a document, after which I will query details from that table. The issue I have is that the second xpath query is pulling results from the entire document.
As an example, I have:
``` from lxml import html
exampledocument=""" <head> example </head> <body> <table><tbody> <tr><th>exampleCellNotToFind</th> </tbody></table> <table id="exampleTableToFind"><tbody> <tr><th>exampleCellToFind</th> </tbody></table> </body> """
example=html.fromstring(exampledocument)
xpath1=example.xpath('//table[@id="exampleTableToFind"]', smart_strings=False) xpath2=xpath1[0].xpath('//table', smart_strings=False) xpath3=html.fromstring(html.tostring(xpath1[0])).xpath('//table', smart_strings=False) ```
In this case, xpath2 includes both tables (xpath1 only includes 1 table), and I don't understand why. From reading "XPath return values" section of https://lxml.de/xpathxslt.html#xpath I thought smart_strings=True would the reason, but setting it to false didn't seem to change the output as far as I can tell.
I do have a workable solution in this html.fromstring(html.tostring()), but thought I should ask here to try to understand how these element type variables are working.
Thanks, for any help. _______________________________________________ lxml - The Python XML Toolkit mailing list -- lxml@python.org To unsubscribe send an email to lxml-leave@python.org https://mail.python.org/mailman3//lists/lxml.python.org Member address: xmo@odoo.com