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.2.tar.gz (22.3 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.2-py3-none-any.whl (11.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: smartxml-1.1.2.tar.gz
  • Upload date:
  • Size: 22.3 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.2.tar.gz
Algorithm Hash digest
SHA256 7e5da7d6ef41c7b2639a97ebf77ef38bfb49079930e9ccc15ea68e37917054f2
MD5 0d1659f0af2e65438f963a70f8a3955a
BLAKE2b-256 5a9475b0231f202fce6a631c0935b7e81298defe7e0255bde91b52f165afd4ec

See more details on using hashes here.

File details

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

File metadata

  • Download URL: smartxml-1.1.2-py3-none-any.whl
  • Upload date:
  • Size: 11.0 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 67ff51d850095cb20932e90070cad741df6665f6ecd23ebfc9b78cba664f56bf
MD5 37324a0d3736355a3dba9534ba78974f
BLAKE2b-256 2c7c4d0be29ab5bb7e8f47108cf3447a61edf5cb139767defcfc7854b40d1744

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