Edgewall Software

Using XPath in Genshi

Genshi provides basic XPath support for matching and querying event streams.

1   Limitations

Due to the streaming nature of the processing model, Genshi uses only a subset of the XPath 1.0 language.

In particular, only the following axes are supported:

  • attribute
  • child
  • descendant
  • descendant-or-self
  • self

This means you can't use the parent, ancestor, or sibling axes in Genshi (the namespace axis isn't supported either, but what you'd ever need that for I don't know). Basically, any path expression that would require buffering of the stream is not supported.

Predicates are of course supported, but Path expressions inside predicates are restricted to attribute lookups (again due to the lack of buffering).

Most of the XPath functions and operators are supported, however they (currently) only work inside predicates. The following functions are not supported:

  • count()
  • id()
  • lang()
  • last()
  • position()
  • string()
  • sum()

The mathematical operators (+, -, *, div, and mod) are not yet supported, whereas the various comparison and logical operators should work as expected.

You can also use XPath variable references ($var) inside predicates.

2   Querying Streams

from genshi.input import XML

doc = XML('''<doc>
 <items count="2">
      <item status="new">
      <item status="closed">
print doc.select('items/item[@status="closed"]/summary/text()')

This would result in the following output:


See also: genshi.path, Documentation, Markup streams

Last modified 16 months ago Last modified on Dec 14, 2015 6:22:32 AM