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

minidom-14

基于 quick-xml 的一个小型、简单的 DOM 实现,针对 XMPP 有用的 XML 子集

3 个版本 (破坏性更新)

0.16.0 2023年3月22日
0.15.0 2023年3月22日
0.14.0 2023年3月22日

#6 in #quick-xml


用于 dae-parser

MPL-2.0 许可证

81KB
1.5K SLoC

minidom-14

这是 minidom 0.14 的分支,它仅接收依赖升级和错误修复。这个crate存在是因为 minidom 0.15 显著改变了它的API并放弃了 quick-xml 的支持。


lib.rs:

在 quick-xml 之上构建的最小 DOM crate,仅针对 XMPP 有用的 XML 子集。

此库导出了一个 Element 结构体,它表示一个 DOM 树。

示例

运行 cargo run --example articles。位于 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);
}

使用方法

要使用 minidom,将以下内容添加到您的 Cargo.toml 中的 dependencies

minidom = "*"

依赖关系

~1.5MB
~22K SLoC