Last updated:
0 purchases
inxs 0.2b1
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.
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.