open Bytesrw
(* DOM manipulation example *)
let html = {|
DOM Example
|}
let () =
let result = Html5rw.parse (Bytes.Reader.of_string html) in
(* Find the content div *)
match Html5rw.query result "#content" with
| content_div :: _ ->
Printf.printf "Original:\n%s\n\n" (Html5rw.Dom.to_html content_div);
(* Create and append a new element *)
let new_para = Html5rw.create_element "p" () in
let text_node = Html5rw.create_text "This paragraph was added programmatically!" in
Html5rw.append_child new_para text_node;
Html5rw.set_attr new_para "class" "dynamic";
Html5rw.append_child content_div new_para;
Printf.printf "After adding element:\n%s\n\n" (Html5rw.Dom.to_html content_div);
(* Create an element with attributes *)
let link = Html5rw.create_element "a"
~attrs:[("href", "https://example.com"); ("target", "_blank")] () in
Html5rw.append_child link (Html5rw.create_text "Click here");
Html5rw.append_child content_div link;
Printf.printf "After adding link:\n%s\n\n" (Html5rw.Dom.to_html content_div);
(* Check attributes *)
Printf.printf "Link has href: %b\n" (Html5rw.has_attr link "href");
Printf.printf "Link href value: %s\n"
(Option.value ~default:"(none)" (Html5rw.get_attr link "href"));
(* Clone a node *)
let cloned = Html5rw.clone ~deep:true content_div in
Printf.printf "\nCloned node children: %d\n"
(List.length cloned.Html5rw.Dom.children);
(* Get descendants *)
let all_descendants = Html5rw.descendants content_div in
Printf.printf "Total descendants: %d\n" (List.length all_descendants)
| [] ->
Printf.printf "Content div not found\n"