#node-tree #node #html #html-parser #tree #reader #parser

htmldom_read

将代码解析成易于使用的树状结构的HTML阅读器

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 数据结构

MIT 许可协议

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