|Version 3 (modified by cmlenz, 7 years ago)|
Using XPath in Markup
Markup provides basic XPath support for matching and querying event streams.
Due to the streaming nature of the processing model, Markup uses only a subset of the XPath 1.0 language.
In particular, only the following axes are supported:
- namespace (not completed yet)
This means you can't use the ancestor, parent, or sibling axes in Markup. Basically, any path expression that would require buffering of the stream is not supported.
In addition, Markup does not (yet) support numeric types in XPath: everything is treated as text or booleans. For that reason, relational or additive operators such as >, <, or <= are not supported right now.
The following XPath functions are currently supported:
- local-name() (the optional node-set parameter is not supported)
- namespace-uri() (the optional node-set parameter is not supported)
- name() (the optional node-set parameter is not supported)
from markup.input import XML doc = XML('''<doc> <items count="2"> <item status="new"> <summary>Foo</summary> </item> <item status="closed"> <summary>Bar</summary> </item> </items> </doc>''') print doc.select('items/item[@status="closed"]/summary/text()')
This would result in the following output: