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