Skip to main content

XPath 1.0/2.0 parsers and selectors for ElementTree.

Project description

===========
elementpath
===========

.. elementpath-introduction

The proposal of this package is to provide XPath 1.0 and 2.0 selectors for Python's ElementTree XML
data structures, both for the standard ElementTree library and for the
`lxml.etree <http://lxml.de>`_ library.

For `lxml.etree <http://lxml.de>`_ this package can be useful for providing XPath 2.0 selectors,
because `lxml.etree <http://lxml.de>`_ already has it's own implementation of XPath 1.0.

The XPath 2.0 functions implementation not completed yet, due to wide number of functions that this
language provides. If you want you can contribute to add an unimplemented function see the section below.


Installation and usage
----------------------

You can install the package with *pip* in a Python 2.7 or Python 3.3+ environment::

pip install elementpath

For using it import the package and apply the selectors on ElementTree nodes:

.. doctest::

>>> import elementpath
>>> from xml.etree import ElementTree
>>> root = ElementTree.XML('<A><B1/><B2><C1/><C2/><C3/></B2></A>')
>>> elementpath.select(root, '/A/B2/*')
[<Element 'C1' at ...>, <Element 'C2' at ...>, <Element 'C3' at ...>]

The *select* API provides the standard XPath result format that is a list or an elementary
datatype's value. If you want only to iterate over results you can use the generator function
*iter_select* that accepts the same arguments of *select*.

The selectors API works also using XML data trees based on the `lxml.etree <http://lxml.de>`_
library:

.. doctest::

>>> import elementpath
>>> import lxml.etree as etree
>>> root = etree.XML('<A><B1/><B2><C1/><C2/><C3/></B2></A>')
>>> elementpath.select(root, '/A/B2/*')
[<Element C1 at ...>, <Element C2 at ...>, <Element C3 at ...>]


When you need to apply the same XPath expression to several XML data you can also use the
*Selector* class, creating an instance and then using it to apply the path on distinct XML
data:

.. doctest::

>>> import elementpath
>>> import lxml.etree as etree
>>> selector = elementpath.Selector('/A/*/*')
>>> root = etree.XML('<A><B1/><B2><C1/><C2/><C3/></B2></A>')
>>> selector.select(root)
[<Element C1 at ...>, <Element C2 at ...>, <Element C3 at ...>]
>>> root = etree.XML('<A><B1><C0/></B1><B2><C1/><C2/><C3/></B2></A>')
>>> selector.select(root)
[<Element C0 at ...>, <Element C1 at ...>, <Element C2 at ...>, <Element C3 at ...>]

Public API classes and functions are described into the
`elementpath manual on the "Read the Docs" site <http://elementpath.readthedocs.io/en/latest/>`_.

Contributing
------------

You can contribute to this package reporting bugs, using the issue tracker or by a pull request.
In case you open an issue please try to provide a test or test data for reproducing the wrong
behaviour. The provided testing code shall be added to the tests of the package.

The XPath parsers are based on an implementation of the Pratt's Top Down Operator Precedence parser.
The implemented parser includes some lookup-ahead features, helpers for registering tokens and for
extending language implementations. Also the token class has been generalized using a `MutableSequence`
as base class. See *tdop_parser.py* for the basic internal classes and *xpath1_parser.py* for extensions
and for a basic usage of the parser.

If you like you can use the basic parser and tokens provided by the *tdop_parser.py* module to
implement other types of parsers (I think it could be also a funny exercise!).


License
-------

This software is distributed under the terms of the MIT License.
See the file 'LICENSE' in the root directory of the present
distribution, or http://opensource.org/licenses/MIT.


Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

elementpath-1.0.8.tar.gz (31.9 kB view details)

Uploaded Source

Built Distribution

elementpath-1.0.8-py2.py3-none-any.whl (43.3 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file elementpath-1.0.8.tar.gz.

File metadata

  • Download URL: elementpath-1.0.8.tar.gz
  • Upload date:
  • Size: 31.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for elementpath-1.0.8.tar.gz
Algorithm Hash digest
SHA256 bbdb5192b40b068ab126b74af385ec1740adea4d9196cc61cac0ad85ec80e4c7
MD5 107ded951636596cd1d4c3f8a60847ce
BLAKE2b-256 1ac2323836e5dcf060734ce48cad6286fa067f1d00ba5a968b82dbb8bb11fd12

See more details on using hashes here.

File details

Details for the file elementpath-1.0.8-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for elementpath-1.0.8-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 c80af59e7b6537240e906d96761d12e0635d317ce80b81a650f3ead9350aad07
MD5 31e6f7af707caef550f8619a7ed63c2e
BLAKE2b-256 6c907d183bafdb2af9a86944f1d814382ca6826f9e4ed2f2038a63f4c80c6c35

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page