use html5ever::{tendril::TendrilSink, tree_builder::TreeSink};
use markup5ever::{LocalName, Namespace, QualName};
use markup5ever_rcdom::{RcDom, SerializableHandle};
pub fn html_to_xml(content: &str) -> String {
serialize_xml(parse_html(content))
}
fn parse_html(content: &str) -> RcDom {
let qual_name = QualName::new(
None,
Namespace::from("http://www.w3.org/1999/xhtml"),
LocalName::from("body"),
);
html5ever::parse_fragment(
RcDom::default(),
html5ever::ParseOpts::default(),
qual_name,
vec![],
)
.one(content)
.finish()
}
fn serialize_xml(content: RcDom) -> String {
let document: SerializableHandle = content.document.into();
let mut bytes = vec![];
xml5ever::serialize::serialize(
&mut bytes,
&document,
xml5ever::serialize::SerializeOpts {
traversal_scope: xml5ever::serialize::TraversalScope::ChildrenOnly(None),
},
)
.unwrap();
let bytes = bytes[43..(bytes.len() - 7)].to_vec();
String::from_utf8(bytes).unwrap()
}