8个版本 (4个破坏性更新)
0.5.0 | 2019年4月28日 |
---|---|
0.4.0 | 2019年4月14日 |
0.3.3 | 2019年4月11日 |
0.2.0 | 2019年4月6日 |
0.1.0 | 2019年4月5日 |
#1678 in 数据结构
47KB
991 行
HTML阅读器
描述
这个库允许读取HTML字符串并将它们转换为节点树。有了树,处理存储为HTML/XML文件的HTML数据将更容易。还可以更改节点并将它们转换回HTML字符串。
当前主要功能
- 将带有空格的属性解析为多个字符串
- 搜索具有特定属性的节点
- 更改属性
- 更改标签名
- 编辑节点的子数组
- 将节点转换回HTML
- 在可共享节点(带有Arc)和无Arc节点之间进行选择
示例
从HTML加载节点
# use htmldom_read::Node;
let html = r#"
<div><p>Text</p></div>
"#;
// Load with default settings.
let nodes = Node::from_html(html, &Default::default()).unwrap().unwrap();
let first_node = nodes.children().get(0).unwrap();
// First node is <div>
assert_eq!("div", first_node.tag_name().unwrap());
let children = first_node.children();
// First child of <div> is <p>
let first_child = children.get(0).unwrap();
assert_eq!("p", first_child.tag_name().unwrap());
/// The child of <p> is Text
assert_eq!("Text", first_child.children().get(0).unwrap().text().unwrap());
加载带有文本和子节点的节点
不混合加载的文本既不在父节点内部,也不作为单独的子节点。
# use htmldom_read::{Node, LoadSettings};
let html = r#"
<p>Text <sup>child</sup> more text</p>
"#;
let settings = LoadSettings::new().all_text_separately(false);
let from = Node::from_html(html, &settings).unwrap().unwrap();
let node = from.children().get(0).unwrap();
let children = node.children();
let first_text = children.get(0).unwrap();
assert_eq!("Text ", first_text.text().unwrap());
let sup = children.get(1).unwrap();
assert_eq!("child", sup.text().unwrap());
let last_text = children.get(2).unwrap();
assert_eq!(" more text", last_text.text().unwrap());
依赖关系
~4.5MB
~141K SLoC