import gleam/dict import gleam/string_tree import simplejson/jsonvalue import xmb import xmljson/internal/json as bjson import xmljson/internal/xml as bxml import xmlm /// Parse an XML string into a JSON object. pub fn to_json(input: String) -> jsonvalue.JsonValue { let input = input |> xmlm.from_string |> xmlm.with_stripping(True) // Skip the first element for now, we do not take into account the DTD let assert Ok(#(xmlm.Dtd(_), input)) = xmlm.signal(input) let #(lst, _) = bxml.parse_xml(input, [], [], dict.new()) jsonvalue.JsonObject(bxml.dict_from_list(lst)) } /// Parse an JSON object into an xml fragment. pub fn to_xml_fragment(input: jsonvalue.JsonValue) -> String { let assert [x] = bjson.parse(input) xmb.render_fragment(x) |> string_tree.to_string } /// Parse an JSON object into an xml string. pub fn to_xml(input: jsonvalue.JsonValue) -> String { bjson.parse(input) |> xmb.render() |> string_tree.to_string }