#xml #xmpp #dom #quick-xml #element #subset #targeting

minidom-14

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

3 releases (breaking)

0.16.0 Mar 22, 2023
0.15.0 Mar 22, 2023
0.14.0 Mar 22, 2023

#4 in #quick-xml

Download history 17/week @ 2023-12-11 36/week @ 2024-01-01 10/week @ 2024-01-08 71/week @ 2024-01-15 14/week @ 2024-01-22 21/week @ 2024-01-29 45/week @ 2024-02-05 78/week @ 2024-02-12 140/week @ 2024-02-19 119/week @ 2024-02-26 142/week @ 2024-03-04 62/week @ 2024-03-11 46/week @ 2024-03-18 43/week @ 2024-03-25

298 downloads per month
Used in dae-parser

MPL-2.0 license

81KB
1.5K SLoC

minidom-14

This is a fork of minidom 0.14, which is exclusively receiving dependency upgrades and bugfixes. This crate exists because minidom 0.15 changed its API significantly and dropped support for quick-xml.


lib.rs:

A minimal DOM crate built on top of quick-xml, 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

~1.5MB
~22K SLoC