├── src ├── test │ ├── resources │ │ ├── secret.txt │ │ ├── public │ │ │ └── cljs-tests │ │ │ │ └── index.html │ │ └── clojure │ │ │ └── data │ │ │ └── xml │ │ │ ├── cljs_testsuite.clj │ │ │ └── cljs_repl_nashorn.clj │ ├── clojure │ │ └── clojure │ │ │ └── data │ │ │ └── xml │ │ │ ├── test_equiv.cljc │ │ │ ├── test_utils.clj │ │ │ ├── test_pprint.clj │ │ │ ├── test_process.cljc │ │ │ ├── test_cljs.clj │ │ │ ├── test_entities.clj │ │ │ ├── test_seq_tree.clj │ │ │ ├── test_names.clj │ │ │ ├── test_sexp.clj │ │ │ ├── test_pu.cljc │ │ │ ├── test_parse.clj │ │ │ └── test_emit.clj │ └── clojurescript │ │ └── clojure │ │ └── data │ │ └── xml │ │ ├── test_cljs_basic.cljs │ │ ├── cljs_repls.clj │ │ ├── test_cljs.cljs │ │ └── test_cljs_extended.cljs └── main │ ├── clojure │ ├── data_readers.cljc │ └── clojure │ │ └── data │ │ ├── xml │ │ ├── js │ │ │ ├── name.cljs │ │ │ └── dom.cljs │ │ ├── jvm │ │ │ ├── pprint.clj │ │ │ ├── name.clj │ │ │ ├── parse.clj │ │ │ └── emit.clj │ │ ├── protocols.cljc │ │ ├── process.clj │ │ ├── impl.clj │ │ ├── prxml.clj │ │ ├── tree.clj │ │ ├── pu_map.cljc │ │ ├── event.clj │ │ ├── name.cljc │ │ └── node.cljc │ │ ├── xml.cljs │ │ └── xml.clj │ ├── clojurescript │ └── xmlns │ │ └── http%3A%2F%2Fwww │ │ └── w3 │ │ ├── org%2F2000%2Fxmlns%2F.cljc │ │ └── org%2FXML%2F1998%2Fnamespace.cljc │ └── resources │ └── clojure │ └── data │ └── xml │ └── spec.cljc ├── webpack.config.js ├── .github └── workflows │ ├── snapshot.yml │ ├── doc-build.yml │ ├── release.yml │ └── test.yml ├── .gitignore ├── dxml-nashorn.global.js ├── package.json ├── CONTRIBUTING.md ├── project.clj ├── CHANGES.md ├── pom.xml ├── LICENSE ├── epl-v10.html └── README.md /src/test/resources/secret.txt: -------------------------------------------------------------------------------- 1 | root_password 2 | -------------------------------------------------------------------------------- /src/main/clojure/data_readers.cljc: -------------------------------------------------------------------------------- 1 | {xml/ns clojure.data.xml.name/uri-symbol 2 | xml/element clojure.data.xml.node/tagged-element} 3 | -------------------------------------------------------------------------------- /src/test/resources/public/cljs-tests/index.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | entry: "./dxml-nashorn.global.js", 3 | output: { 4 | filename: "dxml-nashorn.generated.js", 5 | path: "./src/test/resources/" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /.github/workflows/snapshot.yml: -------------------------------------------------------------------------------- 1 | name: Snapshot on demand 2 | 3 | on: [workflow_dispatch] 4 | 5 | jobs: 6 | call-snapshot: 7 | uses: clojure/build.ci/.github/workflows/snapshot.yml@master 8 | secrets: inherit 9 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | modules/xml/target/ 3 | modules/xml.pull-parser/target/ 4 | *~ 5 | /out/ 6 | /node_modules/ 7 | /nashorn_code_cache/ 8 | /figwheel_server.log 9 | /.nrepl-port 10 | /.cljs_nashorn_repl/ 11 | .idea/ 12 | *.iml 13 | -------------------------------------------------------------------------------- /dxml-nashorn.global.js: -------------------------------------------------------------------------------- 1 | global.console = { 2 | log: print, 3 | warn: print, 4 | error: print 5 | }; 6 | global.xmldom = require("xmldom"); 7 | global.DOMParser = global.xmldom.DOMParser; 8 | global.XMLSerializer = global.xmldom.XMLSerializer; 9 | -------------------------------------------------------------------------------- /.github/workflows/doc-build.yml: -------------------------------------------------------------------------------- 1 | 2 | name: Build API Docs 3 | 4 | on: 5 | workflow_dispatch: 6 | 7 | jobs: 8 | call-doc-build-workflow: 9 | uses: clojure/build.ci/.github/workflows/doc-build.yml@master 10 | with: 11 | project: clojure/data.xml 12 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | 3 | "scripts": { 4 | "build": "webpack" 5 | } 6 | 7 | , "devDependencies": { 8 | "webpack": "2.1.0-beta.27", 9 | "xmldom" : "0.1.27" 10 | "domino" : "" 11 | } 12 | , "name": "dxml-nashorn-api" 13 | } 14 | -------------------------------------------------------------------------------- /src/main/clojurescript/xmlns/http%3A%2F%2Fwww/w3/org%2F2000%2Fxmlns%2F.cljc: -------------------------------------------------------------------------------- 1 | (ns xmlns.http%3A%2F%2Fwww.w3.org%2F2000%2Fxmlns%2F 2 | "Require - able uri namespace for the `xmlns` prefix. 3 | This uri is special, in that it is predefined in every xml 4 | vocabulary and has the prefix `xmlns` reserved for it, which cannot 5 | be redefined" 6 | {:fixed-prefix "xmlns"}) 7 | 8 | -------------------------------------------------------------------------------- /src/main/clojurescript/xmlns/http%3A%2F%2Fwww/w3/org%2FXML%2F1998%2Fnamespace.cljc: -------------------------------------------------------------------------------- 1 | (ns xmlns.http%3A%2F%2Fwww.w3.org%2FXML%2F1998%2Fnamespace 2 | "Require - able uri namespace for the `xml` prefix. 3 | This uri is special, in that it is predefined in every xml 4 | vocabulary and has the prefix `xml` reserved for it, which cannot 5 | be redefined" 6 | {:fixed-prefix "xml"}) 7 | 8 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | This is a [Clojure contrib] project. 2 | 3 | Under the Clojure contrib [guidelines], this project cannot accept 4 | pull requests. All patches must be submitted via [JIRA]. 5 | 6 | See [Contributing] on the Clojure website for 7 | more information on how to contribute. 8 | 9 | [Clojure contrib]: https://clojure.org/community/contrib_libs 10 | [Contributing]: https://clojure.org/community/contributing 11 | [JIRA]: https://jira.atlassian.net/browse/DXML 12 | [guidelines]: https://clojure.org/community/contrib_howto 13 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release on demand 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | releaseVersion: 7 | description: "Version to release" 8 | required: true 9 | snapshotVersion: 10 | description: "Snapshot version after release" 11 | required: true 12 | 13 | jobs: 14 | call-release: 15 | uses: clojure/build.ci/.github/workflows/release.yml@master 16 | with: 17 | releaseVersion: ${{ github.event.inputs.releaseVersion }} 18 | snapshotVersion: ${{ github.event.inputs.snapshotVersion }} 19 | secrets: inherit -------------------------------------------------------------------------------- /src/test/clojure/clojure/data/xml/test_equiv.cljc: -------------------------------------------------------------------------------- 1 | (ns clojure.data.xml.test-equiv 2 | (:require [clojure.data.xml :refer [element qname]] 3 | [clojure.test :refer [deftest is are testing]])) 4 | 5 | (deftest test-node-equivalence 6 | (are [repr1 repr2] (and (is (= repr1 repr2)) 7 | (is (= (hash repr1) (hash repr2)))) 8 | (element :foo) {:tag :foo :attrs {} :content []} 9 | (element (qname "DAV:" "foo")) {:tag (qname "DAV:" "foo") :attrs {} :content []} 10 | (element :foo {:a "b"}) {:tag :foo :attrs {:a "b"} :content []} 11 | (element :foo {:a "b"} "a" "b") {:tag :foo :attrs {:a "b"} :content ["a" "b"]})) 12 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Test 2 | 3 | on: [push] 4 | 5 | jobs: 6 | test: 7 | strategy: 8 | matrix: 9 | os: [ubuntu-latest] # macOS-latest, windows-latest] 10 | java-version: ["8"] 11 | clojure-version: ["1.9.0", "1.10.3", "1.11.4", "1.12.3"] 12 | runs-on: ${{ matrix.os }} 13 | steps: 14 | - uses: actions/checkout@v3 15 | - name: Set up Java 16 | uses: actions/setup-java@v3 17 | with: 18 | java-version: ${{ matrix.java-version }} 19 | distribution: 'temurin' 20 | cache: 'maven' 21 | - name: Build with Maven 22 | run: mvn -ntp -B -Dclojure.version=${{ matrix.clojure-version }} clean test 23 | -------------------------------------------------------------------------------- /project.clj: -------------------------------------------------------------------------------- 1 | (defproject org.clojure/data.xml "0-UE-DEVELOPMENT" 2 | :source-paths ["src/main/clojure" "src/main/clojurescript"] 3 | :test-paths ["src/test/clojure" "src/test/clojurescript"] 4 | :resource-paths ["src/main/resources" "src/test/resources" "target/gen-resources"] 5 | :dependencies [[org.clojure/clojure "1.10.3"] 6 | [org.clojure/clojurescript "1.10.439"] 7 | [cider/piggieback "0.5.3"] 8 | [org.clojure/tools.nrepl "0.2.13"] 9 | [org.clojure/test.check "1.1.1"] 10 | [figwheel-sidecar "0.5.17"] 11 | [binaryage/devtools "0.9.10"] 12 | [org.openjdk.nashorn/nashorn-core "15.3"]] 13 | :repl-options {:nrepl-middleware [cider.piggieback/wrap-cljs-repl]}) 14 | -------------------------------------------------------------------------------- /src/test/clojure/clojure/data/xml/test_utils.clj: -------------------------------------------------------------------------------- 1 | ; Copyright (c) Rich Hickey. All rights reserved. 2 | ; The use and distribution terms for this software are covered by the 3 | ; Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php) 4 | ; which can be found in the file epl-v10.html at the root of this distribution. 5 | ; By using this software in any fashion, you are agreeing to be bound by 6 | ; the terms of this license. 7 | ; You must not remove this notice, or any other, from this software. 8 | 9 | (ns ^{:doc "Tests for emit to print XML text." 10 | :author "Chris Houser"} 11 | clojure.data.xml.test-utils 12 | (:require [clojure.data.xml :as xml :refer [parse]])) 13 | 14 | (defn test-stream [x] 15 | (java.io.ByteArrayInputStream. (.getBytes x "UTF-8"))) 16 | 17 | (def lazy-parse* (comp parse test-stream)) 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/test/clojure/clojure/data/xml/test_pprint.clj: -------------------------------------------------------------------------------- 1 | ; Copyright (c) Rich Hickey. All rights reserved. 2 | ; The use and distribution terms for this software are covered by the 3 | ; Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php) 4 | ; which can be found in the file epl-v10.html at the root of this distribution. 5 | ; By using this software in any fashion, you are agreeing to be bound by 6 | ; the terms of this license. 7 | ; You must not remove this notice, or any other, from this software. 8 | 9 | (ns ^{:doc "Tests for emit to print XML text." 10 | :author "Herwig Hochleitner"} 11 | clojure.data.xml.test-pprint 12 | (:require 13 | [clojure.string :as str] 14 | [clojure.test :refer :all] 15 | [clojure.data.xml :refer :all])) 16 | 17 | (def xml 18 | "Eclipse Public License - v 1.0
31 | 32 |THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE 33 | PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR 34 | DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS 35 | AGREEMENT.
36 | 37 |1. DEFINITIONS
38 | 39 |"Contribution" means:
40 | 41 |a) in the case of the initial Contributor, the initial 42 | code and documentation distributed under this Agreement, and
43 |b) in the case of each subsequent Contributor:
44 |i) changes to the Program, and
45 |ii) additions to the Program;
46 |where such changes and/or additions to the Program 47 | originate from and are distributed by that particular Contributor. A 48 | Contribution 'originates' from a Contributor if it was added to the 49 | Program by such Contributor itself or anyone acting on such 50 | Contributor's behalf. Contributions do not include additions to the 51 | Program which: (i) are separate modules of software distributed in 52 | conjunction with the Program under their own license agreement, and (ii) 53 | are not derivative works of the Program.
54 | 55 |"Contributor" means any person or entity that distributes 56 | the Program.
57 | 58 |"Licensed Patents" mean patent claims licensable by a 59 | Contributor which are necessarily infringed by the use or sale of its 60 | Contribution alone or when combined with the Program.
61 | 62 |"Program" means the Contributions distributed in accordance 63 | with this Agreement.
64 | 65 |"Recipient" means anyone who receives the Program under 66 | this Agreement, including all Contributors.
67 | 68 |2. GRANT OF RIGHTS
69 | 70 |a) Subject to the terms of this Agreement, each 71 | Contributor hereby grants Recipient a non-exclusive, worldwide, 72 | royalty-free copyright license to reproduce, prepare derivative works 73 | of, publicly display, publicly perform, distribute and sublicense the 74 | Contribution of such Contributor, if any, and such derivative works, in 75 | source code and object code form.
76 | 77 |b) Subject to the terms of this Agreement, each 78 | Contributor hereby grants Recipient a non-exclusive, worldwide, 79 | royalty-free patent license under Licensed Patents to make, use, sell, 80 | offer to sell, import and otherwise transfer the Contribution of such 81 | Contributor, if any, in source code and object code form. This patent 82 | license shall apply to the combination of the Contribution and the 83 | Program if, at the time the Contribution is added by the Contributor, 84 | such addition of the Contribution causes such combination to be covered 85 | by the Licensed Patents. The patent license shall not apply to any other 86 | combinations which include the Contribution. No hardware per se is 87 | licensed hereunder.
88 | 89 |c) Recipient understands that although each Contributor 90 | grants the licenses to its Contributions set forth herein, no assurances 91 | are provided by any Contributor that the Program does not infringe the 92 | patent or other intellectual property rights of any other entity. Each 93 | Contributor disclaims any liability to Recipient for claims brought by 94 | any other entity based on infringement of intellectual property rights 95 | or otherwise. As a condition to exercising the rights and licenses 96 | granted hereunder, each Recipient hereby assumes sole responsibility to 97 | secure any other intellectual property rights needed, if any. For 98 | example, if a third party patent license is required to allow Recipient 99 | to distribute the Program, it is Recipient's responsibility to acquire 100 | that license before distributing the Program.
101 | 102 |d) Each Contributor represents that to its knowledge it 103 | has sufficient copyright rights in its Contribution, if any, to grant 104 | the copyright license set forth in this Agreement.
105 | 106 |3. REQUIREMENTS
107 | 108 |A Contributor may choose to distribute the Program in object code 109 | form under its own license agreement, provided that:
110 | 111 |a) it complies with the terms and conditions of this 112 | Agreement; and
113 | 114 |b) its license agreement:
115 | 116 |i) effectively disclaims on behalf of all Contributors 117 | all warranties and conditions, express and implied, including warranties 118 | or conditions of title and non-infringement, and implied warranties or 119 | conditions of merchantability and fitness for a particular purpose;
120 | 121 |ii) effectively excludes on behalf of all Contributors 122 | all liability for damages, including direct, indirect, special, 123 | incidental and consequential damages, such as lost profits;
124 | 125 |iii) states that any provisions which differ from this 126 | Agreement are offered by that Contributor alone and not by any other 127 | party; and
128 | 129 |iv) states that source code for the Program is available 130 | from such Contributor, and informs licensees how to obtain it in a 131 | reasonable manner on or through a medium customarily used for software 132 | exchange.
133 | 134 |When the Program is made available in source code form:
135 | 136 |a) it must be made available under this Agreement; and
137 | 138 |b) a copy of this Agreement must be included with each 139 | copy of the Program.
140 | 141 |Contributors may not remove or alter any copyright notices contained 142 | within the Program.
143 | 144 |Each Contributor must identify itself as the originator of its 145 | Contribution, if any, in a manner that reasonably allows subsequent 146 | Recipients to identify the originator of the Contribution.
147 | 148 |4. COMMERCIAL DISTRIBUTION
149 | 150 |Commercial distributors of software may accept certain 151 | responsibilities with respect to end users, business partners and the 152 | like. While this license is intended to facilitate the commercial use of 153 | the Program, the Contributor who includes the Program in a commercial 154 | product offering should do so in a manner which does not create 155 | potential liability for other Contributors. Therefore, if a Contributor 156 | includes the Program in a commercial product offering, such Contributor 157 | ("Commercial Contributor") hereby agrees to defend and 158 | indemnify every other Contributor ("Indemnified Contributor") 159 | against any losses, damages and costs (collectively "Losses") 160 | arising from claims, lawsuits and other legal actions brought by a third 161 | party against the Indemnified Contributor to the extent caused by the 162 | acts or omissions of such Commercial Contributor in connection with its 163 | distribution of the Program in a commercial product offering. The 164 | obligations in this section do not apply to any claims or Losses 165 | relating to any actual or alleged intellectual property infringement. In 166 | order to qualify, an Indemnified Contributor must: a) promptly notify 167 | the Commercial Contributor in writing of such claim, and b) allow the 168 | Commercial Contributor to control, and cooperate with the Commercial 169 | Contributor in, the defense and any related settlement negotiations. The 170 | Indemnified Contributor may participate in any such claim at its own 171 | expense.
172 | 173 |For example, a Contributor might include the Program in a commercial 174 | product offering, Product X. That Contributor is then a Commercial 175 | Contributor. If that Commercial Contributor then makes performance 176 | claims, or offers warranties related to Product X, those performance 177 | claims and warranties are such Commercial Contributor's responsibility 178 | alone. Under this section, the Commercial Contributor would have to 179 | defend claims against the other Contributors related to those 180 | performance claims and warranties, and if a court requires any other 181 | Contributor to pay any damages as a result, the Commercial Contributor 182 | must pay those damages.
183 | 184 |5. NO WARRANTY
185 | 186 |EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS 187 | PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 188 | OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, 189 | ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY 190 | OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely 191 | responsible for determining the appropriateness of using and 192 | distributing the Program and assumes all risks associated with its 193 | exercise of rights under this Agreement , including but not limited to 194 | the risks and costs of program errors, compliance with applicable laws, 195 | damage to or loss of data, programs or equipment, and unavailability or 196 | interruption of operations.
197 | 198 |6. DISCLAIMER OF LIABILITY
199 | 200 |EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT 201 | NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, 202 | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING 203 | WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF 204 | LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 205 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR 206 | DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED 207 | HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
208 | 209 |7. GENERAL
210 | 211 |If any provision of this Agreement is invalid or unenforceable under 212 | applicable law, it shall not affect the validity or enforceability of 213 | the remainder of the terms of this Agreement, and without further action 214 | by the parties hereto, such provision shall be reformed to the minimum 215 | extent necessary to make such provision valid and enforceable.
216 | 217 |If Recipient institutes patent litigation against any entity 218 | (including a cross-claim or counterclaim in a lawsuit) alleging that the 219 | Program itself (excluding combinations of the Program with other 220 | software or hardware) infringes such Recipient's patent(s), then such 221 | Recipient's rights granted under Section 2(b) shall terminate as of the 222 | date such litigation is filed.
223 | 224 |All Recipient's rights under this Agreement shall terminate if it 225 | fails to comply with any of the material terms or conditions of this 226 | Agreement and does not cure such failure in a reasonable period of time 227 | after becoming aware of such noncompliance. If all Recipient's rights 228 | under this Agreement terminate, Recipient agrees to cease use and 229 | distribution of the Program as soon as reasonably practicable. However, 230 | Recipient's obligations under this Agreement and any licenses granted by 231 | Recipient relating to the Program shall continue and survive.
232 | 233 |Everyone is permitted to copy and distribute copies of this 234 | Agreement, but in order to avoid inconsistency the Agreement is 235 | copyrighted and may only be modified in the following manner. The 236 | Agreement Steward reserves the right to publish new versions (including 237 | revisions) of this Agreement from time to time. No one other than the 238 | Agreement Steward has the right to modify this Agreement. The Eclipse 239 | Foundation is the initial Agreement Steward. The Eclipse Foundation may 240 | assign the responsibility to serve as the Agreement Steward to a 241 | suitable separate entity. Each new version of the Agreement will be 242 | given a distinguishing version number. The Program (including 243 | Contributions) may always be distributed subject to the version of the 244 | Agreement under which it was received. In addition, after a new version 245 | of the Agreement is published, Contributor may elect to distribute the 246 | Program (including its Contributions) under the new version. Except as 247 | expressly stated in Sections 2(a) and 2(b) above, Recipient receives no 248 | rights or licenses to the intellectual property of any Contributor under 249 | this Agreement, whether expressly, by implication, estoppel or 250 | otherwise. All rights in the Program not expressly granted under this 251 | Agreement are reserved.
252 | 253 |This Agreement is governed by the laws of the State of New York and 254 | the intellectual property laws of the United States of America. No party 255 | to this Agreement will bring a legal action under this Agreement more 256 | than one year after the cause of action arose. Each party waives its 257 | rights to a jury trial in any resulting litigation.
258 | 259 | 260 | 261 | 262 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # data.xml 2 | 3 | [data.xml](https://github.com/clojure/data.xml) is a Clojure library for reading and writing XML data. This 4 | library is the successor to 5 | [lazy-xml](https://clojure.github.io/clojure-contrib/lazy-xml-api.html). 6 | data.xml has the following features: 7 | 8 | * Parses XML documents into Clojure data structures 9 | * Emits XML from Clojure data structures 10 | * No additional dependencies if using JDK >= 1.6 11 | * Uses StAX internally 12 | * lazy - should allow parsing and emitting of large XML documents 13 | 14 | ## API Reference 15 | 16 | Generated API docs for data.xml are available [here](https://clojure.github.io/data.xml). 17 | 18 | ## Bugs 19 | 20 | Please report bugs using JIRA [here](https://clojure.atlassian.net/browse/DXML). 21 | 22 | ## Installation 23 | 24 | Latest stable release: `0.0.8` 25 | 26 | Latest preview release: `0.2.0-alpha9` 27 | 28 | (The main features of the `0.2.0` series are XML Namespace support and Clojurescript support) 29 | 30 | * [All Released Versions](https://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.clojure%22%20AND%20a%3A%22data.xml%22) 31 | 32 | * [Development Snapshot Versions](https://oss.sonatype.org/index.html#nexus-search;gav~org.clojure~data.xml~~~) 33 | 34 | ### Maven 35 | For Maven projects, add the following XML in your `pom.xml`'s `