A framework for XML transformations without boilerplate.
Project description
inxs – A Python framework for XML transformations without boilerplate.
inxs is inexcessive.
inxs is not XSLT.
inxs is ISC-licensed.
inxs is fully documented here: https://inxs.readthedocs.io/en/latest/
At a glimpse
Solving the Wikipedia XSLT example #1:
def extract_person(node: TagNode):
return node.attributes['username'], first(node.css_select("name")).full_text
def append_person(previous_result, result: TagNode):
result.append_child(result.new_tag_node(
"name", attributes={"username": previous_result[0]},
children=[previous_result[1]]
))
transformation = Transformation(
Rule('person', (extract_person, append_person)),
result_object='context.result', context={'result': new_tag_node('root')})
# that's four lines less LOC than the XSLT implementation
Solving the Wikipedia XSLT example #2:
def generate_skeleton(context):
context.html = new_tag_node(
"html", namespace='http://www.w3.org/1999/xhtml',
children=(
tag("head",
tag("title", "Testing XML Example")),
tag("body", (
tag("h1", "Persons"),
tag("ul")
)),
)
)
def extract_person(node: TagNode, persons):
persons.append(
(first(node.css_select("name")).full_text,
first(node.css_select("family-name")).full_text)
)
def list_persons(previous_result, html: TagNode):
first(html.css_select("html|body html|ul")).append_child(
*(html.new_tag_node("li", children=[f'{x[1]}, {x[0]}'])
for x in previous_result)
)
transformation = Transformation(
generate_skeleton,
Rule('person', extract_person),
lib.sort('persons', itemgetter(1)),
list_persons,
result_object='context.html', context={'persons': []})
# that's four lines more LOC than the XSLT implementation
Here you can find the source repository and issue tracker of inxs.
History
0.2b1 (2019-06-23)
refactored to base on delb instead of lxml
- removed from the available symbols for handler functions:
tree
xpath_evaluator (use root.xpath instead)
- renamed available symbols for handler functions:
element -> node
- renamed in core:
SkipToNextElement -> SkipToNextNode
- removed from the lib:
drop_siblings
extract_text
has_tail
init_elementmaker
merge
replace_text
sub
- renamed in the lib:
make_element -> make_node
remove_element -> remove_node
remove_elements -> remove_nodes
sorter -> sort
strip_attributes -> remove_attributes
strip_namespace -> remove_namespace
Various arguments to functions and methods have been renamed accordingly.
0.1b1 (2017-06-25)
new: Allows the definition that any rule must match per transformation as common_rule_conditions.
Minor improvements and fixes.
0.1b0 (2017-06-19)
First beta release.
0.1a0 (2017-05-02)
First release on PyPI.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file inxs-0.2b1.tar.gz
.
File metadata
- Download URL: inxs-0.2b1.tar.gz
- Upload date:
- Size: 32.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.7.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 68630ffbd61606cc662175ddfed4b035bb2a9c7700fd228c83a697bf11250a57 |
|
MD5 | 4e39d78769121118bd8731ca4fb86336 |
|
BLAKE2b-256 | 547c8dc4d04c15ce7a5a0110960524922b76551411b62fca06f7dd5086234d9a |