Phil Cooper / Apr 20 2023
Remix of Clojure by
Nextjournal
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