search_dom/
search_dom.rs

1use parsercher;
2
3fn main() {
4    let html = r#"
5<!DOCTYPE html>
6<html>
7  <head>
8    <meta charset="UTF-8">
9    <title>sample html</title>
10  </head>
11  <body>
12
13    <ul id="list1" class="targetList">
14      <li class="key1">1-1</li>
15      <li class="key2"><span>1-2</span></li>
16    </ul>
17
18    <ul id="list2">
19      <li class="key1">2-1</li>
20      <li>2-2</li>
21    </ul>
22
23    <div>
24      <div>
25        <ul class="targetList">
26          <ul id="list3" class="targetList">
27            <li class="key1">3-1</li>
28            <li class="item">3-2</li>
29            <li class="key2">3-3</li>
30          </ul>
31        </ul>
32      </div>
33    </div>
34
35    <ul id="list4">
36      <li class="key1">4-1</li>
37      <li class="key2">4-2</li>
38    </ul>
39
40  </body>
41</html>
42"#;
43
44    let root_dom = parsercher::parse(&html).unwrap();
45
46    let needle = r#"
47<ul class="targetList">
48  <li class="key1"></li>
49  <li class="key2"></li>
50</ul>
51"#;
52    let needle_dom = parsercher::parse(&needle).unwrap();
53    // Remove `root`dom of needle_dom
54    let needle_dom = needle_dom.get_children().unwrap().get(0).unwrap();
55
56    if let Some(dom) = parsercher::search_dom(&root_dom, &needle_dom) {
57        parsercher::print_dom_tree(&dom);
58    }
59}