1 个不稳定版本
0.0.1 | 2022年1月15日 |
---|
#10 in #quick-xml
79KB
1.5K SLoC
domino
这是什么?
这是 minidom 的分支(https://crates.io/crates/minidom),不仅针对 XMPP。
差异
目前的主要区别是 domino 不要求元素位于命名空间中。
lib.rs
:
基于 quick-xml 构建的最小化 DOM 库,专门针对 XMPP 有用的 XML 子集。
此库导出 Element
结构体,代表 DOM 树。
示例
运行 cargo run --example articles
。位于 examples/articles.rs
。
extern crate domino;
use domino::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. <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);
}
用法
要使用 domino
,请将以下内容添加到您的 Cargo.toml
中的 dependencies
domino = "0.0.1"
依赖关系
~1.5MB
~22K SLoC