{"id":13611267,"url":"https://github.com/redundent/kotlin-xml-builder","last_synced_at":"2026-01-14T03:23:17.646Z","repository":{"id":44029684,"uuid":"75868809","full_name":"redundent/kotlin-xml-builder","owner":"redundent","description":"A lightweight type safe builder to build xml documents in Kotlin","archived":false,"fork":false,"pushed_at":"2025-04-06T14:07:40.000Z","size":448,"stargazers_count":163,"open_issues_count":6,"forks_count":19,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-04-06T14:38:20.819Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/redundent.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-12-07T19:30:23.000Z","updated_at":"2025-04-06T14:07:35.000Z","dependencies_parsed_at":"2023-02-11T21:46:22.039Z","dependency_job_id":"d0616d9d-c4af-413a-82ce-7353a7612e2f","html_url":"https://github.com/redundent/kotlin-xml-builder","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/redundent/kotlin-xml-builder","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redundent%2Fkotlin-xml-builder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redundent%2Fkotlin-xml-builder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redundent%2Fkotlin-xml-builder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redundent%2Fkotlin-xml-builder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/redundent","download_url":"https://codeload.github.com/redundent/kotlin-xml-builder/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redundent%2Fkotlin-xml-builder/sbom","scorecard":{"id":768193,"data":{"date":"2025-08-11","repo":{"name":"github.com/redundent/kotlin-xml-builder","commit":"116ad332fbb54c39e9f638975441f995b065f26f"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Info: topLevel 'contents' permission set to 'read': .github/workflows/deploy.yml:7","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":1,"reason":"Found 3/23 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":9,"reason":"binaries present in source code","details":["Warn: binary detected: gradle/wrapper/gradle-wrapper.jar:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Pinned-Dependencies","score":3,"reason":"dependency not pinned by hash detected -- score normalized to 3","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/redundent/kotlin-xml-builder/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/redundent/kotlin-xml-builder/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/redundent/kotlin-xml-builder/deploy.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/redundent/kotlin-xml-builder/deploy.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/deploy.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/redundent/kotlin-xml-builder/deploy.yml/main?enable=pin","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   1 out of   2 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 22 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-23T01:28:08.187Z","repository_id":44029684,"created_at":"2025-08-23T01:28:08.187Z","updated_at":"2025-08-23T01:28:08.187Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28408828,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T01:52:23.358Z","status":"online","status_checked_at":"2026-01-14T02:00:06.678Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T19:01:53.480Z","updated_at":"2026-01-14T03:23:17.629Z","avatar_url":"https://github.com/redundent.png","language":"Kotlin","funding_links":[],"categories":["Kotlin","文件操作"],"sub_categories":["XML库"],"readme":"![CI](https://github.com/redundent/kotlin-xml-builder/workflows/CI/badge.svg)\n[![Download](https://maven-badges.herokuapp.com/maven-central/org.redundent/kotlin-xml-builder/badge.svg)](https://maven-badges.herokuapp.com/maven-central/org.redundent/kotlin-xml-builder)\n\nKotlin XML Builder\n=\n\nThis library can be used to build xml documents from Kotlin code.\nIt is based on the HTML builder described in the [Kotlin docs](https://kotlinlang.org/docs/reference/type-safe-builders.html)\n\nIt is designed to be lightweight and fast. There isn't any validation except to \nescape text to not violate xml standards.\n\nLicense\n-\nApache 2.0\n\nUsage\n=\nTo use in Gradle, simply add the Maven Central repository and then add the following dependency.\n```gradle\nrepositories {\n    mavenCentral()\n}\n\ndependencies {\n    compile(\"org.redundent:kotlin-xml-builder:[VERSION]\")\n}\n```\n\nSimilarly in Maven:\n```xml\n\u003cdependencies\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003eorg.redundent\u003c/groupId\u003e\n        \u003cartifactId\u003ekotlin-xml-builder\u003c/artifactId\u003e\n        \u003cversion\u003e[VERSION]\u003c/version\u003e\n    \u003c/dependency\u003e\n\u003c/dependencies\u003e\n```\n\nExample\n=\n```kotlin\nval people = xml(\"people\") {\n    xmlns = \"http://example.com/people\"\n    \"person\" {\n        attribute(\"id\", 1)\n        \"firstName\" {\n            -\"John\"\n        }\n        \"lastName\" {\n            -\"Doe\"\n        }\n        \"phone\" {\n            -\"555-555-5555\"\n        }\n    }\n}\n\nval asString = people.toString()\n```\nproduces\n```xml\n\u003cpeople xmlns=\"http://example.com/people\"\u003e\n    \u003cperson id=\"1\"\u003e\n        \u003cfirstName\u003e\n            John\n        \u003c/firstName\u003e\n        \u003clastName\u003e\n            Doe\n        \u003c/lastName\u003e\n        \u003cphone\u003e\n            555-555-5555\n        \u003c/phone\u003e\n    \u003c/person\u003e\n\u003c/people\u003e\n```\n\n```kotlin\nclass Person(val id: Long, val firstName: String, val lastName: String, val phone: String)\n\nval listOfPeople = listOf(\n    Person(1, \"John\", \"Doe\", \"555-555-5555\"),\n    Person(2, \"Jane\", \"Doe\", \"555-555-6666\")\n)\n\nval people = xml(\"people\") {\n    xmlns = \"http://example.com/people\"\n    for (person in listOfPeople) {\n        \"person\" {\n            attribute(\"id\", person.id)\n            \"firstName\" {\n                -person.firstName\n            }\n            \"lastName\" {\n                -person.lastName\n            }\n            \"phone\" {\n                -person.phone\n            }\n        }\n    }    \n}\n\nval asString = people.toString()\n```\nproduces\n```xml\n\u003cpeople xmlns=\"http://example.com/people\"\u003e\n    \u003cperson id=\"1\"\u003e\n        \u003cfirstName\u003e\n            John\n        \u003c/firstName\u003e\n        \u003clastName\n            \u003eDoe\n        \u003c/lastName\u003e\n        \u003cphone\u003e\n            555-555-5555\n        \u003c/phone\u003e\n    \u003c/person\u003e\n    \u003cperson id=\"2\"\u003e\n        \u003cfirstName\u003e\n            Jane\n        \u003c/firstName\u003e\n        \u003clastName\u003e\n            Doe\n        \u003c/lastName\u003e\n        \u003cphone\u003e\n            555-555-6666\n        \u003c/phone\u003e\n    \u003c/person\u003e\n\u003c/people\u003e\n```\n\n### Namespaces\nVersion 1.8.0 added more precise control over how namespaces are used. You can add a namespace to any element or attribute\nand the correct node/attribute name will be used automatically. When using the new namespace aware methods, you no longer\nneed to manually add the namespace to the element.\n\nSee examples of `\u003c 1.8.0` and `\u003e= 1.8.0` below to produce the following xml\n\n```xml\n\u003ct:root xmlns:t=\"https://ns.org\"\u003e\n    \u003ct:element t:key=\"value\"/\u003e\n\u003c/t:root\u003e\n```\n\n#### \u003c 1.8.0\n```kotlin\nxml(\"t:root\") {\n    namespace(\"t\", \"https://ns.org\")\n    \"t:element\"(\"t:key\" to \"value\")\n}\n```\n\n#### \u0026gt;= 1.8.0\n```kotlin\nval ns = Namespace(\"t\", \"https://ns.org\")\nxml(\"root\", ns) {\n    \"element\"(ns, Attribute(\"key\", \"value\", ns))\n}\n```\n\nYou can also use the `Namespace(\"https://ns.org\")` constructor to create a Namespace object that represents the default xmlns.\n\n#### Things to be aware of\n\n* Previously, all namespace declarations would get added to the attributes maps immediately. That no long happens. All\nnamespaces get added at render time. To retrieve a list of the current namespaces of a node, use the `namespaces` property.\n* When a namespace is provided for a node or attribute, it will be declared on that element IF it is not already declared\non the root element or one of the element's parents.\n\n### Processing Instructions\nYou can add processing instructions to any element by using the `processingInstruction` method.\n\n```kotlin\nxml(\"root\") {\n    processingInstruction(\"instruction\")\n}\n```\n\n```xml\n\u003croot\u003e\n    \u003c?instruction?\u003e\n\u003c/root\u003e\n```\n\n#### Global Instructions\nSimilarly you can add a global (top-level) instruction by call `globalProcessingInstruction` on the\nroot node. This method only applies to the root. If it is called on any other element, it will be ignored.\n\n\n```kotlin\nxml(\"root\") {\n    globalProcessingInstruction(\"xml-stylesheet\", \"type\" to \"text/xsl\", \"href\" to \"style.xsl\")\n}\n```\n\n```xml\n\u003c?xml-stylesheet type=\"text/xsl\" href=\"style.xsl\"?\u003e\n\u003croot/\u003e\n```\n\n## DOCTYPE\n\nAs of version 1.7.4, you can specify a DTD (Document Type Declaration).\n\n```kotlin\nxml(\"root\") {\n    doctype(systemId = \"mydtd.dtd\")\n}\n```\n\n```xml\n\u003c!DOCTYPE root SYSTEM \"mydtd.dtd\"\u003e\n\u003croot/\u003e\n```\n\n### Limitations with DTD\n\nComplex DTDs are not supported.\n\n## Unsafe\nYou can now use unsafe text for element and attribute values.\n```kotlin\nxml(\"root\") {\n\tunsafeText(\"\u003cxml/\u003e\")\n}\n```\nproduces\n```xml\n\u003croot\u003e\n    \u003cxml/\u003e\n\u003c/root\u003e\n```\n\n```kotlin\nxml(\"root\") {\n\tattribute(\"attr\", unsafe(\"\u0026#123;\"))\n}\n```\nproduces\n```xml\n\u003croot attr=\"\u0026amp;#123;\"/\u003e\n```\n\n## Print Options\nYou can now control how your xml will look when rendered by passing the new PrintOptions class as an argument to `toString`.\n\n`pretty` - This is the default and will produce the xml you see above.\n\n`singleLineTextElements` - This will render single text element nodes on a single line if `pretty` is true\n```xml\n\u003croot\u003e\n    \u003celement\u003evalue\u003c/element\u003e\n\u003c/root\u003e\n```\nas opposed to:\n```xml\n\u003croot\u003e\n    \u003celement\u003e\n        value\n    \u003c/element\u003e\n\u003c/root\u003e\n```\n`useSelfClosingTags` - Use `\u003celement/\u003e` instead of `\u003celement\u003e\u003c/element\u003e` for empty tags\n\n`useCharacterReference` - Use character references instead of escaped characters. i.e. `\u0026#39;` instead of `\u0026apos;`\n\n## Reading XML\nYou can also read xml documents using the `parse` methods. They provide basic \nxml parsing and will build a `Node` element to build upon.\n\nFor more advanced consuming, check out [konsume-xml](https://gitlab.com/mvysny/konsume-xml).\nIt includes many more features for consuming documents.\n\nRelease Notes\n=============\nVersion 1.9.3\n-\n* Re-fixing issue where text elements are ignored when they are just whitespace\n\nVersion 1.9.2\n-\n* Fixing issue where text elements are ignored when they are just whitespace\\\nThanks to [@fiddlededee](https://github.com/fiddlededee) for finding this!\n\nVersion 1.9.1\n-\n* Adding `addElement`, `addElements`, `addElementsBefore`, `addElementsAfter`, `removeElement`,\n`removeElements`, and `replaceElement` to Node.\\\nThanks to [@csmile2](https://github.com/csmile2) for requesting this!\n* Deprecating `addNode`, `addNodeBefore`, `addNodeAfter`, `removeNode`, and `replaceNode` in favor of Element methods.\n* Adding ktlint checks\n\nVersion 1.9.0\n-\n* Adding `unsafe` and `unsafeText` methods to allow for unescaped values in elements and attributes.\\\nThanks to [@krzysztofsroga](https://github.com/krzysztofsroga) for requesting this!\n\n**BREAKING CHANGES**\n* The `attributes` property on a node will now return an immutable map (`Map` instead of `LinkedHashMap`). This property can no longer be used to\\\nmanipulate the attributes. Use `set`/`removeAttribute` for that.\n \nVersion 1.8.0\n-\n* Adding more precise functionality for xml namespaces, allowing typesafe building of elements and attributes with namespaces.\\\nThanks to [@asm0dey](https://github.com/asm0dey) for requesting this!\n\nVersion 1.7.4\n-\n* Adding ability to add a DTD.\\\nThanks to [@anskotid](https://github.com/anskotid) for raising this!\n\nVersion 1.7.3\n-\n* Making `private fun parse(Document)` public.\\\nThanks to [@rkklai](https://github.com/rkklai) for requesting this!\n\nVersion 1.7.2\n-\n* Fixing issue where a text element that contains an empty string doesn't respect `useSelfClosingTags`.\\\nThanks to [@d-wojciechowski](https://github.com/d-wojciechowski) for finding this!\n\nVersion 1.7.1\n-\n* Added new PrintOptions to control the indent character(s) used. `indent` default is `\\t`.\\\nThanks to [@vRallev](https://github.com/vRallev) for adding this!\n\nVersion 1.7\n-\n**POTENTIAL BREAKING CHANGES**\n* All node types override `equals` and `hashCode`. This could change the behavior of putting nodes in a Set or Map.\\\nThanks to [@cbartolome](https://github.com/cbartolome) for requesting this!\n\nVersion 1.6.1\n-\n* Added new PrintOptions to use character references instead of HTML names.\\\nThanks to [@senecal-jjs](https://github.com/senecal-jjs) and [@sleddog](https://github.com/sleddor) for\nadding this!\n\nVersion 1.6.0\n-\n* Updated README\n\n**BREAKING CHANGES**\n* The `kotlin-reflect` dependency has been removed from the transitive dependnecies.\nThis module is only used for controlling element order using `@XmlType`.\nIf your project depends on that feature, you will need to have `kotlin-reflect` on the \nruntime classpath.\\\nThanks to [@mvysny](https://github.com/mvysny) for requesting this!\n\nVersion 1.5.4\n-\n* Adding new global processing instructions.\\\nThanks to [@rjaros](https://github.com/rjaros) for requsting this!\n\nVersion 1.5.3\n-\n* Fixing single line text element rendering for processing instructures and CData elements.\\\nThanks to [@jonathan-yan](https://github.com/jonathan-yan) for fixing this!\n\nVersion 1.5.2\n-\n* Added ability to specify the xml version. This affects both the prolog and text escaping.\\\nThanks to [@ZR8C](https://github.com/ZR8C) for finding this!\n\nVersion 1.5.1\n-\n* Added ability to add processing instructions. Use the new `processingInstruction` method to do this.\\\nThanks to [@endofhome](https://github.com/endofhome) for adding this!\n* Added ability to add comments. Use the new `comment` method to do this.\\\nThanks to [@ejektaflex](https://github.com/ejektaflex) for requesting this!\n\nVersion 1.5.0\n-\n* Added more robust PrintOptions class to allow for more control over how xml is structured.\\\nFixes issue #16\n* Attribute values are now fully escaped properly.\\\nThanks to [@pkulak](https://github.com/pkulak) for finding and fixing this!\n\n**BREAKING CHANGES**\n* Changed Element.render method signature to use kotlin.text.Appenable instead of kotlin.text.StringBuilder.\nAny custom element types created will need to be updated\n\nVersion 1.4.5\n-\n* Fixed incorrect handling of CDATA elements. `prettyFormat` should not alter the CDATA content.\n* Fixed nested CData elements\\\nBig thanks to [@TWiStErRob](https://github.com/TWiStErRob) for finding and fixing both of these!\n\nVersion 1.4.4\n-\n* Switched to Kotlin's `Charsets` instead of using `java.nio.charset.StandardCharsets`. `StandardCharsets` is not available in some versions of Android.\\\nThanks to [@little-fish](https://github.com/little-fish) for submitting and fixing this!\n\nVersion 1.4.3\n-\n**BREAKING CHANGES**\n* Moved `prettyFormat` to a parameter of `toString()`. `prettyFormat` in the constructor or util method is no longer available. Fixes issue #7\n\nVersion 1.4.2\n-\n* Fixes issue #6\n\nVersion 1.4.1\n-\n* Upgrading Gradle to 4.9\n* Upgrading Kotlin to 1.2.60\n* Fix issue #4\n* Tweak generation code to be more concise\n* Add flag to code generation to allow for member functions instead of extension functions\n\nVersion 1.4\n-\n**BREAKING CHANGES**\n* `org.redundent.kotlin.xml.Node.name` has been renamed to `org.redundent.kotlin.xml.Node.nodeName` to avoid clashes with attributes called `name`.\n---\n* Adding DSL generator project to generate kotlin-xml-builder DSL from a schema file.\nSee [kotlin-xml-dsl-generator](./kotlin-xml-dsl-generator) for details\n\nVersion 1.3\n-\n* Added ability to parse an xml document into a builder object using the new `parse` method.\n* Upgrading Gradle and Kotlin versions.\n\nVersion 1.2\n-\n* Added a `sitemap` method to allow for easy generation of sitemaps (which is what this project was created for in the first place).\n* Added `String.invoke` for elements allowing you to specify elements by just their name (see docs above)\n* Added some searching methods to search child nodes. `filter`, `first`, `firstOrNull`, and `exists`.\n* Added some mutation methods to allow you to add/remove/replace nodes in an element. \n\nVersion 1.1\n-\n* Added convenience method for elements with just a name and value. `element(\"name\", \"value\")`\n* Removed `ns` method. Please use `namespace(...)` instead.\n* Upgraded Gradle version\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredundent%2Fkotlin-xml-builder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fredundent%2Fkotlin-xml-builder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredundent%2Fkotlin-xml-builder/lists"}