#html-parser #html #dom #html-xml #editor #parser #xml-parser

html_editor

Pure and simple HTML parser and editor

9 releases (breaking)

0.7.0 Nov 14, 2023
0.6.1 Apr 22, 2023
0.5.3 Apr 22, 2023
0.5.2 Aug 21, 2022
0.4.0 Mar 19, 2022

#10 in #html-xml

Download history 148/week @ 2024-07-29 138/week @ 2024-08-05 132/week @ 2024-08-12 32/week @ 2024-08-19 55/week @ 2024-08-26 80/week @ 2024-09-02 45/week @ 2024-09-09 11/week @ 2024-09-16 115/week @ 2024-09-23 71/week @ 2024-09-30 24/week @ 2024-10-07 13/week @ 2024-10-14 41/week @ 2024-10-21 3/week @ 2024-10-28 20/week @ 2024-11-04 53/week @ 2024-11-11

120 downloads per month
Used in 4 crates (3 directly)

MIT license

52KB
933 lines

crate-badge downloads-badge License check-badge

HTML Editor

Pure and simple HTML parser and editor.

Examples

Parse HTML segment/document

let document: Vec<Node> = parse("<!doctype html><html><head></head><body></body></html>")?;
println!("{:#?}", document);

Output:

[
    Doctype(
        Html,
    ),
    Element {
        name: "html",
        attrs: {},
        children: [
            Element {
                name: "head",
                attrs: {},
                children: [],
            },
            Element {
                name: "body",
                attrs: {},
                children: [],
            },
        ],
    },
]

You can also use try_parse to parse the html which contains tolerable errors

let document: Vec<Node> = try_parse("<div><span>Ipsum</div>");

Query an element / elements by selector

// let html = r#"..."#
let nodes: Vec<Node> = parse(html)?;
let selector: Selector = Selector::from(".box");

let element: Option<Element> = nodes.query(&selector);
let elements: Vec<Element> = nodes.query_all(&selector);

Edit the HTML

// let html = r#"..."#
let a: String = parse(html)?.trim().html();
let b: String = parse(html)?.insert_to(&selector, node).html();
let c: String = parse(html)?.remove_by(&selector).html();
let d: String = parse(html)?.replace_with(&selector, |el| Node::Comment(el.html())).html();

You can find more examples in the documentation.

Changelog

See in CHANGELOG.md

No runtime deps