Current section
Files
Jump to
Current section
Files
src/xmljson.gleam
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
}