xml_dom 0.1.0

A Rust crate providing a reasonably faithful implementation of the W3C DOM Core
Documentation

Crate xml_dom

A Rust crate providing a reasonably faithful implementation of the W3C Document Object Model Core, Level 2.

MIT License Minimum Rust Version crates.io docs.rs GitHub stars

This crate provides a trait-based implementation of the DOM with minimal changes to the style and semantics defined in the Level 2 specification. The specific mapping from the IDL in the specification is described in the documentation, however from a purely style point of view the implementation has the following characteristics:

  1. It maintains a reasonable separation between the node type traits and the tree implementation using opaque Node reference types.
  2. Where possible the names from IDL are used with minimal conversion, however some redundant suffixes (_data, _node) have been reduced for brevity/clarity.
  3. This leads to a replication of the typical programmer experience where casting between the node traits is required. This is supported by the xml_dom::convert module.

Example

use xml_dom::*;
use xml_dom::convert::*;

let implementation = get_implementation();
let mut document_node =
    implementation.create_document("uri:urn:simons:thing:1", "root", None).unwrap();

let document = as_document(&document_node).unwrap();
let root = document.create_element("root").unwrap();

let mut root_node = document_node.append_child(root).unwrap();
let root = as_element_mut(&mut root_node).unwrap();
root.set_attribute("version", "1.0");
root.set_attribute("something", "else");

let xml = document_node.to_string();
println!("document 2: {}", xml);

Changes

Version 0.1.0

  • Focus on modeling as traits, not all functions actually implemented.
  • Note, this is NOT YET ready for production usage.

TODO

  1. Currently does not support DocumentFragment, Entity, EntityReference, or Notation.
  2. Not intending to be schema-aware, so Document::get_element_by_id always returns None.
  3. A lot of required methods are still unimplemented!().
  4. Intend to add reader features to de-serialize using crate quick_xml.