#xml #xmpp #dom #rxml #top #element #subset

minidom

A small, simple DOM implementation on top of rxml, targeting the subset of XML useful for XMPP

30 releases (15 breaking)

0.16.0 Jul 23, 2024
0.15.2 May 13, 2023
0.15.1 Jan 15, 2023
0.15.0 Jul 13, 2022
0.1.1 Feb 25, 2017

#315 in Web programming

Download history 20904/week @ 2024-07-07 23793/week @ 2024-07-14 23777/week @ 2024-07-21 26465/week @ 2024-07-28 30153/week @ 2024-08-04 23237/week @ 2024-08-11 22689/week @ 2024-08-18 21919/week @ 2024-08-25 24162/week @ 2024-09-01 23135/week @ 2024-09-08 23837/week @ 2024-09-15 25507/week @ 2024-09-22 22632/week @ 2024-09-29 25255/week @ 2024-10-06 25383/week @ 2024-10-13 28838/week @ 2024-10-20

103,481 downloads per month
Used in 73 crates (47 directly)

MPL-2.0 license

74KB
1.5K SLoC

minidom

What's this?

A minimal DOM library on top of rxml, targeting exclusively the subset of XML useful for XMPP.


lib.rs:

A minimal DOM crate built on top of rxml, targeting exclusively the subset of XML useful for XMPP.

This library exports an Element struct which represents a DOM tree.

Example

Run with cargo run --example articles. Located in examples/articles.rs.

extern crate minidom;

use minidom::Element;

const DATA: &'static str = r#"<articles xmlns="article">
    <article>
        <title>10 Terrible Bugs You Would NEVER Believe Happened</title>
        <body>
            Rust fixed them all. &lt;3
        </body>
    </article>
    <article>
        <title>BREAKING NEWS: Physical Bug Jumps Out Of Programmer's Screen</title>
        <body>
            Just kidding!
        </body>
    </article>
</articles>"#;

const ARTICLE_NS: &'static str = "article";

#[derive(Debug)]
pub struct Article {
    title: String,
    body: String,
}

fn main() {
    let root: Element = DATA.parse().unwrap();

    let mut articles: Vec<Article> = Vec::new();

    for child in root.children() {
        if child.is("article", ARTICLE_NS) {
            let title = child.get_child("title", ARTICLE_NS).unwrap().text();
            let body = child.get_child("body", ARTICLE_NS).unwrap().text();
            articles.push(Article {
                title: title,
                body: body.trim().to_owned(),
            });
        }
    }

    println!("{:?}", articles);
}

Usage

To use minidom, add this to your Cargo.toml under dependencies:

minidom = "*"

Dependencies

~1MB
~23K SLoC