Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

A data processing library built on Python 3 and MicroXML. This module adds the MicroXML support, and adaptation to classic XML.

Uche Ogbuji < uche@ogbuji.net > More discussion, etc: https://groups.google.com/forum/#!forum/akara

Install

Requires:

For the latter 2, you can do:

pip install pytest “amara3-iri>=3.0.0a2”

Use

Amara in version 3.0 is focused on MicroXML, rather than full XML. However because most of the XML-like data you’ll be dealing with is XML 1.0, Amara provides capabilities to parse legacy XML and reduce it to MicroXML. In many cases the biggest implication of this is that namespace information is stripped. As long as you know what you’re doing you can get pretty far by ignoring this, but make sure you know what you’re doing.

  from amara3.uxml import xml

  MONTY_XML = """<monty xmlns="urn:spam:ignored">
    <python spam="eggs">What do you mean "bleh"</python>
    <python ministry="abuse">But I was looking for argument</python>
  </monty>"""

  builder = xml.treebuilder()
  root = builder.parse(MONTY_XML)
  print(root.xml_name) #"monty"
  child = next(root.xml_children)
  print(child) #First text node: "
"
  child = next(root.xml_children)
  print(child.xml_value) #"What do you mean "bleh""
  print(child.xml_attributes["spam"]) #"eggs"

There are some utilities to make this a bit easier as well.

from amara3.uxml import xml
from amara3.uxml.treeutil import *

MONTY_XML = """<monty xmlns="urn:spam:ignored">
  <python spam="eggs">What do you mean "bleh"</python>
  <python ministry="abuse">But I was looking for argument</python>
</monty>"""

builder = xml.treebuilder()
root = builder.parse(MONTY_XML)
py1 = next(select_name(root, "python"))
print(py1.xml_value) #"What do you mean "bleh""
py2 = next(select_attribute(root, "ministry", "abuse"))
print(py2.xml_value) #"But I was looking for argument"

Experimental MicroXML parser

For this parser the input truly must be MicroXML. Basics:

>>> from amara3.uxml.parser import parse
>>> events = parse('<hello><bold>world</bold></hello>')
>>> for ev in events: print(ev)
...
(<event.start_element: 1>, 'hello', {}, [])
(<event.start_element: 1>, 'bold', {}, ['hello'])
(<event.characters: 3>, 'world')
(<event.end_element: 2>, 'bold', ['hello'])
(<event.end_element: 2>, 'hello', [])
>>>

Or…And now for something completely different!…Incremental parsing.

>>> from amara3.uxml.parser import parsefrags
>>> events = parsefrags(['<hello', '><bold>world</bold></hello>'])
>>> for ev in events: print(ev)
...
(<event.start_element: 1>, 'hello', {}, [])
(<event.start_element: 1>, 'bold', {}, ['hello'])
(<event.characters: 3>, 'world')
(<event.end_element: 2>, 'bold

Download files

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

Source Distribution

amara3-xml-3.0.0b1.tar.gz (39.4 kB view details)

Uploaded Source

File details

Details for the file amara3-xml-3.0.0b1.tar.gz.

File metadata

  • Download URL: amara3-xml-3.0.0b1.tar.gz
  • Upload date:
  • Size: 39.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for amara3-xml-3.0.0b1.tar.gz
Algorithm Hash digest
SHA256 d4ecc7b4e179275c0f44299a00b2829e79f156f0d7a1b8485441a46989fc1196
MD5 11bd0a9af8fcf889c46aaf92af4957cb
BLAKE2b-256 7ac1eff05459554c2bf1374550a37f7bb51c17dc7d6dcaf19841376106acddb7

See more details on using hashes here.

Release history Release notifications | RSS feed

3.4.1

1 file

3.3.0

1 file

3.2.1

1 file

3.2.0

1 file

3.1.1

1 file

3.1.0

1 file

3.0.2

1 file

3.0.1

1 file

3.0.0

1 file

This release

3.0.0b1 This release

1 file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page