open Bytesrw (* DOM manipulation example *) let html = {| DOM Example

Original content

|} 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"