xml namespaces

{:deps {org.clojure/clojure {:mvn/version "1.10.1"}
        ;; complient is used for autocompletion
        ;; add your libs here (and restart the runtime to pick up changes)
        compliment/compliment {:mvn/version "0.3.9"}
        org.clojure/data.zip {:mvn/version "1.0.0"}
        org.clojure/data.xml {:mvn/version "0.2.0-alpha6"}}}
Extensible Data Notation
{:hello (clojure-version)}
0.1s
(require '[clojure.data.xml :refer :all :as x]
         '[clojure.zip :as z]
         '[clojure.data.zip.xml :refer [xml-> xml1->] :as zx])
3.6s
(print (indent-str (element :foo {:foo-attr "foo value"}
                     (element :bar {:bar-attr "bar value"}
                       (element :baz {} "The baz value1")
                       (element :baz {} "The baz value2")
                       (element :baz {} "The baz value3")))))
0.9s
(parse-str "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
            <foo:html xmlns:foo=\"http://www.w3.org/1999/xhtml\"/>")
0.1s
(emit-str (element (qname "http://www.w3.org/1999/xhtml" "title")
                   {:xmlns/foo "http://www.w3.org/1999/xhtml"}
                   "Example title"))
0.0s
(let [input-xml (java.io.StringReader. "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
                                        <g:foo xmlns:g=\"http://g.openvest.com/\"><bar>bahh<baz>The baz value</baz></bar></g:foo>")]
     (-> (x/parse input-xml)
    z/xml-zip
      (xml-> :foo z/node)))
0.0s
(let [input-xml (java.io.StringReader. "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
                                        <g:foo xmlns:g=\"http://g.openvest.com/\"><bar>bahh<baz>The baz value</baz></bar></g:foo>")]
  (-> (x/parse input-xml)
    (z/xml-zip)
    (xml1-> z/node)
    :tag))
0.0s
(alias-uri 'xh "http://www.w3.org/1999/xhtml")
0.0s
(emit-str {:tag ::xh/html
           :content [{:tag ::xh/head} {:tag ::xh/body :content ["DOCUMENT"]}]})
0.1s
(emit-str (element (qname "http://www.w3.org/1999/xhtml" "title")
                   {:xmlns/foo "http://www.w3.org/1999/xhtml"}
                   "Example title"))
0.0s
(emit-str (element ::xh/h1 
                   {:xmlns/xhtml "http://www.w3.org/1999/xhtml"}
                   "Example title"))
0.0s
(def snippet "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<gnc-v2\n     xmlns:gnc=\"http://www.gnucash.org/XML/gnc\"\n     xmlns:act=\"http://www.gnucash.org/XML/act\"\n     xmlns:book=\"http://www.gnucash.org/XML/book\"\n     xmlns:cd=\"http://www.gnucash.org/XML/cd\"\n     xmlns:cmdty=\"http://www.gnucash.org/XML/cmdty\">\n<gnc:count-data cd:type=\"book\">1</gnc:count-data>\n<gnc:book version=\"2.0.0\">\n<book:id type=\"guid\">9c29209f9f4949c4839efa2f5ca223cb</book:id>\n<gnc:count-data cd:type=\"commodity\">1</gnc:count-data>\n<gnc:count-data cd:type=\"account\">118</gnc:count-data>\n<gnc:count-data cd:type=\"transaction\">1115</gnc:count-data>\n<gnc:count-data cd:type=\"gnc:GncCustomer\">1</gnc:count-data>\n<gnc:count-data cd:type=\"gnc:GncEntry\">10</gnc:count-data>\n<gnc:count-data cd:type=\"gnc:GncInvoice\">5</gnc:count-data>\n<gnc:commodity version=\"2.0.0\">\n  <cmdty:space>CURRENCY</cmdty:space>\n  <cmdty:id>USD</cmdty:id>\n  <cmdty:get_quotes/>\n  <cmdty:quote_source>currency</cmdty:quote_source>\n  <cmdty:quote_tz/>\n</gnc:commodity>\n<gnc:commodity version=\"2.0.0\">\n  <cmdty:space>template</cmdty:space>\n  <cmdty:id>template</cmdty:id>\n  <cmdty:name>template</cmdty:name>\n  <cmdty:xcode>template</cmdty:xcode>\n  <cmdty:fraction>1</cmdty:fraction>\n</gnc:commodity>\n<gnc:account version=\"2.0.0\">\n  <act:name>Root Account</act:name>\n  <act:id type=\"guid\">65da2db443ef41ec8d214bfbcd273da4</act:id>\n  <act:type>ROOT</act:type>\n  <act:commodity>\n    <cmdty:space>CURRENCY</cmdty:space>\n    <cmdty:id>USD</cmdty:id>\n  </act:commodity>\n  <act:commodity-scu>100</act:commodity-scu>\n</gnc:account>\n<gnc:account version=\"2.0.0\">\n  <act:name>Expenses</act:name>\n  <act:id type=\"guid\">d95e20a99bae4a48b3265fa48d837593</act:id>\n  <act:type>EXPENSE</act:type>\n  <act:commodity>\n    <cmdty:space>CURRENCY</cmdty:space>\n    <cmdty:id>USD</cmdty:id>\n  </act:commodity>\n  <act:commodity-scu>100</act:commodity-scu>\n  <act:description>Expenses</act:description>\n  <act:parent type=\"guid\">65da2db443ef41ec8d214bfbcd273da4</act:parent>\n</gnc:account>\n</gnc:book>\n</gnc-v2>\n")
(print snippet)
0.4s
(let [input-xml (java.io.StringReader. snippet)]
  (-> (x/parse input-xml)
    (z/xml-zip)
    (xml1-> :gnc-v2 z/down z/right z/node)
    :tag))
0.0s
;; create aliases in this namespace
(let [input-xml (java.io.StringReader. snippet)]
  (->> (x/parse input-xml)
    meta
    ::x/nss
    :p->u
    (map (fn [[p u]] (alias-uri (symbol p) u)))))
0.1s
(let [input-xml (java.io.StringReader. snippet)]
  (-> (x/parse input-xml)
    (z/xml-zip)
    (xml1-> :gnc-v2 ::gnc/book ::gnc/commodity z/node)
    (x/emit-str)))
0.1s
;; create aliases for output serializaion
(let [input-xml (java.io.StringReader. snippet)]
  (->> (x/parse input-xml)
    meta
    ::x/nss
    :p->u
    (map (fn [[p u]] [(keyword "xmlns" p) u]))
    (into {})))
0.0s
(let [input-xml (java.io.StringReader. snippet)]
  (->> (x/parse input-xml)
    meta
    ::x/nss
    :p->u 
   ))
0.0s
(let [input-xml (java.io.StringReader. snippet)]
  (->> (x/parse input-xml)
    meta
    ;::x/nss
    ;:p->u 
   ))
0.0s
0.0s

Runtimes (1)