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.0a6.tar.gz (21.4 kB view details)

Uploaded Source

File details

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

File metadata

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

File hashes

Hashes for amara3-xml-3.0.0a6.tar.gz
Algorithm Hash digest
SHA256 128035b75aa27e54027f40fe982bb52730360e288914c85eca3ed45879aa2700
MD5 0dfbbbe43f6f3848d9f4bb285e2ee1d1
BLAKE2b-256 bcc40328b083491a7f61baa4ad1a07a04ca79b8b6b3755e767e457bdd3da41df

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.0a6 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