lxml - XPath: descendants, but not by traversing this node -


i have tree of nodes quite frankly mess.

|-... |-cat \-dog    |- dog *    |   |- chicken    |   |     \- cat !    |   \- cat !    |         \- cat !    |             \- dog    |                 |- cat    |                 \- ...    |- cat    |- dog    |   \- cat    \- ... 

given i've selected asterisked 'dog' node, how can select cats whom recent 'dog' ancestor (i.e. have exclamation mark)

equivalently, how can cat descendants of node can reached without traversing dog node?

i'm working in lxml , have bad solution involving disconnecting graphs drop_tree()-ing dog nodes.

you use exslt's set extensions: http://www.exslt.org/set/. they're available in lxml using namespaces={"set": "http://exslt.org/sets"} in xpath expressions.

you like

asteriskeddog.xpath("set:difference(.//cat, .//dog/cat)",     namespaces={"set": "http://exslt.org/sets"}) 

meaning "all cat elements under current node, except under dog element under current node. i've used trick in microdata parsing nested itemscope , itemprop elements


Comments

Popular posts from this blog

php - Calling a template part from a post -

Firefox SVG shape not printing when it has stroke -

How to mention the localhost in android -