example_1/
example_1.rs

1use parse_html::{
2    dom::dom_tree::DomTree,
3    lexer::{lexer_trait::LexerTrait, tokenizer::Lexer},
4    parser::{ast::Parser, parser_trait::ParserTrait},
5};
6
7fn main() {
8    let html = r#"
9    <html lang="en">
10    <head>
11        <meta charset="UTF-8" />
12        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
13        <title>Document</title>
14    </head>
15    <body id="container">
16        ok ceci est un texte
17        <a href="2" id="l1">link1</a>
18        <a href="1">link2</a>
19        <form action="d" method="get">
20            <input type="text" name="name" />
21        </form>
22    </body>
23    </html>"#;
24
25    let mut lexer = Lexer::new(html);
26    let tokens = lexer.tokenize();
27
28    // for token in tokens.clone() {
29    //     println!("{:?}", token);
30    // }
31
32    let mut parser = Parser::new(tokens);
33    let parsed = parser.parse();
34
35    println!("{:#?}", parsed);
36
37    match DomTree::new::<Lexer, Parser>(html) {
38        Ok(dom) => {
39            if let Some(container) = dom.get_by_id("container") {
40                println!("Node id='container' {:?}", container);
41                if let Some(l1) = container.get_by_id("l1") {
42                    println!("Node id='l1' {:?}", l1);
43                }
44            } else {
45                println!("Id not found");
46            }
47        }
48        Err(e) => println!("Erreur de parsing : {:?}", e),
49    }
50}