Skip to main content

smartXML package enables you to read, search, manipulate, and write XML files with ease

Project description

smartXML

smartXML is a lightweight Python package for reading, searching, manipulating, and writing XML files with a clean and intuitive API.

It is designed to make common XML operations straightforward while preserving full control over the XML structure. The API is intentionally minimal and will evolve based on real-world usage and feedback.

At its core, the package provides:

  • SmartXML: a high-level representation of an XML document
  • ElementBase: a common base class for all XML node types

Core Concepts

SmartXML

SmartXML represents an entire XML document, including its declaration and root element.

Properties

  • tree
    The root element of the XML document.

  • declaration
    The XML declaration string
    (e.g. <?xml version="1.0" encoding="UTF-8"?>)

Methods

  • read(path)
    Read and parse an XML file from disk.

  • write(path)
    Write the current XML tree to a file.

  • find(name: str = "", only_one: bool = True, with_content: str = None, case_sensitive: bool = True)
    Search for descendant elements, by name and/or content. can return one or multiple results.

  • to_string(indentation: str = "\t")
    Serialize the entire XML document to a string.


ElementBase

ElementBase is the base class for all node types in the XML tree, including:

  • Element
  • Comment
  • TextOnlyComment
  • CData
  • Doctype

It provides common navigation, manipulation, and serialization functionality.

Properties

  • name
    The element name.

  • parent
    A reference to the parent element
    (None if this is the root).

Methods

  • find(name: str = "", only_one: bool = True, with_content: str = None, case_sensitive: bool = True)
    Search for descendant elements, by name and/or content. can return one or multiple results.

  • remove()
    Remove the current element from its parent.

  • comment_out()
    Comment out the current element.

  • uncomment()
    Restore a previously commented-out element.

  • is_comment()
    Return True if this element represents a comment.

  • to_string(indentation: str = "\t")
    Serialize the element (and its children) to a string.

  • get_path()
    Return the element’s path from the root, using | as a separator.

  • add_before(sibling)
    Insert this element before the given sibling.

  • add_after(sibling)
    Insert this element after the given sibling.

  • add_as_first_son_of(parent)
    Add this element as the first child of the given parent element.

  • add_as_last_son_of(parent)
    Add this element as the last child of the given parent element.


Design Goals

  • Simple, readable API
  • Explicit control over XML structure
  • Safe and predictable tree manipulation
  • Easy serialization back to valid XML

Usage Example

from pathlib import Path
from smartXML.xmltree import SmartXML, TextOnlyComment

input_file = Path('files/students.xml')
xml = SmartXML(input_file)

first_name = xml.find('students|student|firstName', with_content='Bob')
bob = first_name.parent
bob.comment_out()
header = TextOnlyComment('Bob is out')
header.add_before(bob)

xml.write()

result (files/students.xml):

<students>
    <!-- Bob is out -->
    <!--
        <student id="S002">
            <firstName>Bob</firstName>
            <lastName>Levi</lastName>
        </student>
    -->
</students>

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

smartxml-1.1.7.tar.gz (21.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

smartxml-1.1.7-py3-none-any.whl (9.8 kB view details)

Uploaded Python 3

File details

Details for the file smartxml-1.1.7.tar.gz.

File metadata

  • Download URL: smartxml-1.1.7.tar.gz
  • Upload date:
  • Size: 21.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for smartxml-1.1.7.tar.gz
Algorithm Hash digest
SHA256 53ff13b68de1626073745c46444b8896a93ffed62793067ce1eeca4010095aa2
MD5 044e2bac57c71c6515f2cd50e44f971f
BLAKE2b-256 a04f331ae6e7ca2d5196bd5fa0b9d0bf4830f3b4c9e840aacf6d90cb0023c677

See more details on using hashes here.

File details

Details for the file smartxml-1.1.7-py3-none-any.whl.

File metadata

  • Download URL: smartxml-1.1.7-py3-none-any.whl
  • Upload date:
  • Size: 9.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for smartxml-1.1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 ff817b7e1d4b44478b2a2d3233d9563d1c5faa0f93419af4e888f0b57828f0fc
MD5 a66c32a08e5aa3f840591818948f78cd
BLAKE2b-256 9b9947619976109400ee943b191fec261371b39f5751da79f79920445f5d4b02

See more details on using hashes here.

Supported by

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